묻고답하기

Alliance XE 오류가 나서 한달 넘도록 질문하고 있는데 아무도 도와주지 않으시네요.
그래서 모듈 삭제를 하려고 했는데, 이거... 삭제도 안돼요.
어떻게든 고쳐서 써 보고 싶은데 이거 말고도 오류가 많고, 나는 뭐가 뭔지 모르겠고, 그저 슬플 뿐이고...ㅠㅠ
일단 이거 먼저 질문해요.

이쪽엔 지식이 없어서 뭐가 어떻게 된 건지 전혀 모르겠네요.
답답. ㅠㅠ

 

에러  내용은 이거고ㅡ 887번째 줄은 표시 해 뒀어요!

 

Fatal error : Call to undefined method allianceAdminController::loadJSON() in /home/content/52/7871352/html/pray/modules/alliance/alliance.admin.controller.php on line 887 

 

도대체 뭐가 문제일까요? ㅠㅠㅠㅠㅠㅠ

 

 

-----

 

 

<?php
 /**
  * @class  allianceAdminView
  * @author SMaker (dowon2308@paran.com)
  * @brief  allianceXE 모듈의 admin controller class
  **/

 class allianceAdminController extends alliance {

  /**
   * @brief 연합 설정 저장
   */
  function procAllianceAdminInsertConfig() {
   // allianceXE의 model class
   $oAllianceModel = &getModel('alliance');

   // 연합 정보를 구함
   $alliance_info = $oAllianceModel->getAllianceInfo();

   // 연합 관리자 권한이 없으면 에러
   if(!$oAllianceModel->isGranted($alliance_info)) return new Object(-1, 'msg_invalid_access');

   // 넘어온 설정을 구함
   $args = Context::getRequestVars();

   // 불필요한 값 제거
   unset($args->body);
   unset($args->_filter);
   unset($args->module);
   unset($args->act);

   // 넘어온 값 정리
   $this->_trim($args->alliance_title);
   $this->_int($args->count);

   if($args->count < 1) $args->count = 1;

   // 모듈 설정을 구함
   $config = $oAllianceModel->getModuleConfig();

   // 연합 정보를 구함
   $alliance_info = $oAllianceModel->getAllianceInfo();

   $alliance_title = $config->alliance_info->title = $args->alliance_title;
   $alliance_count = $alliance_info->count;

   // 연합 설정 저장
   $oModuleController = &getController('module');
   $output = $oModuleController->insertModuleConfig('alliance', $config);
   if(!$output->toBool()) return $output;

   $current_url = $this->current_url;

   // allianceXE의 controller class
   $oAllianceController = &getController('alliance');

   // 연합 정보가 있다면
   if($alliance_info) {
    // 연합 정보 업데이트
    $args->parent_domain = $current_url;
    $args->title = $alliance_title;
    $args->count = $alliance_count;
    $oAllianceController->updateAllianceInfo($args);

    // 하위 사이트를 구함
    $site_args->s_status = 'accepted'+ ';
    $site_list = $oAllianceModel->getSites($site_args);

    // 하위 사이트가 있다면 동기화 요청 보냄
    if(count($site_list)) {
     $params['ut'] = $this->_encode($config); // << 피라미터

     // 각 사이트에 동기화 요청 보냄
     foreach($site_list as $key => $val) $oAllianceController->sendRequest('syncConfig', $val->domain, $params);
    }
   }

   $this->setMessage('succeed_saved');
  }

  /**
   * @brief 동기화 설정 저장
   */
  function procAllianceAdminInsertSyncConfig() {
   // 입력한 설정을 구함
   $args = Context::getRequestVars();

   // module의 model class
   $oModuleModel = &getModel('module');

   // 다른 설정들과 결합
   $config = $oModuleModel->getModuleConfig('alliance');
   $config->sync->contents_sync = $args->contents_sync; // << 콘텐츠 동기화 (보내기)
   $config->sync->contents_sync_r = $args->contents_sync_r; // << 콘텐츠 동기화 (받기)
   $config->sync->member_sync = $args->member_sync; // << 회원 동기화 (보내기)
   $config->sync->member_sync_r = $args->member_sync_r; // << 회원 동기화 (받기)
   $config->sync->guest_sync = $args->guest_sync; // << 비회원 콘텐츠 동기화 (보내기)
   $config->sync->guest_sync_r = $args->guest_sync_r; // << 비회원 콘텐츠 동기화 (받기)
   $config->sync->target = $args->target; // << 대상
   $config->sync->target_module_srl = $args->target_module_srl; // << 대상 모듈
   $config->sync->contents_title_prefix_r = $args->contents_title_prefix_r; // << 콘텐츠 제목 머릿말 (받기)

   // 연합 설정 저장
   $oModuleController = &getController('module');
   $output = $oModuleController->insertModuleConfig('alliance', $config);
   if(!$output->toBool()) return $output;

   // 메시지 지정
   $this->setMessage('succeed_saved');
  }

  /**
   * @brief 연합 메시지 보내기
   */
  function procAllianceAdminInsertMessage() {
   // 메시지 발송에 필요한 정보를 구함
   $title = trim(Context::get('title'));
   $message = trim(Context::get('content'));

   // 메시지 발송에 필요한 정보가 넘어오지 않았다면 에러
   if(!$title || !$message) return new Object(-1, 'msg_invalid_request');

   // allianceXE의 model class
   $oAllianceModel = &getModel('alliance');

   // 연합 정보를 구함
   $alliance_info = $oAllianceModel->getAllianceInfo();

   // 연합에 소속되어 있지 않으면 에러
   if(!$alliance_info) return new Object(-1, 'msg_cannot_send_message');

   // 메시지를 보낼 수 있는 사이트 목록을 구함
   $args->s_status = 'accepted';
   $site_list = $oAllianceModel->getSites($args);

   // 보낼 수 있는 사이트가 없으면 에러
   if(!count($site_list)) return new Object(-1, 'msg_cannot_send_message');

   $params['title'] = $title;
   $params['content'] = $message;

   $total = $success = count($site_list);
   $failed = 0;

   // allianceXE의 controller class
   $oAllianceController = &getController('alliance');

   // JSON class
   $this->loadJSON($json);

   // 연합에 소속된 각 사이트에 메시지 보냄
   foreach($site_list as $key => $val) {
    $domain = $val->domain;
    $buff = $oAllianceController->sendRequest('message', $domain, $params);

    // JSON 디코딩
    $output = $json->decode($buff);
    if(!$output || $output->message != 'success'){
     $success--;
     $failed++;
    }
   }

   // 메시지 발송 흔적을 남김
   $args->domain = $domain;
   $args->type = 'S';
   $args->title = $title;
   $args->content = $message;
   $output = $oAllianceController->insertMessage($args);
   if(!$output->toBool()) return $output;

   // 성공 유무에 따른 메시지 차별화
   if($success < 1) {
    $message = sprintf(Context::getLang('succeed_alliance_message_sent3'), $total);
   } else {
    if($failed < 1) $message = Context::getLang('succeed_alliance_message_sent');
    else $message = sprintf(Context::getLang('succeed_alliance_message_sent2'), $failed);
   }

   // 메시지 지정
   $this->setMessage($message);
  }

  /**
   * @brief 사이트 초대
   **/
  function procAllianceAdminInvite() {
   $domain = Context::get('domain');
   $title = trim(Context::get('title'));

   // 도메인이 넘어오지 않았다면 에러
   if(!$domain) return new Object(-1, 'msg_invalid_domain');

   // allianceXE의 controller class
   $oAllianceController = &getController('alliance');

   // 요청 보냄
   $buff = $oAllianceController->sendRequest('invite', $domain);

   // 응답이 없으면 에러
   if(!$buff) return new Object(-1, 'msg_failed_invite');

   // JSON class
   $this->loadJSON($json);

   // JSON 디코딩
   $output = $json->decode($buff);

   // API 요청 성공 시
   if($output->message == 'success') {
    // 하위 사이트 등록
    $output = $oAllianceController->insertChildSite($domain, $title);
    if(!$output->toBool()) return $output;

    // 보낸 메시지 등록
    $args->domain = $this->cleanDomain($domain);
    $args->type = 'S';
    $args->title = 'Invitation Message';
    $args->content = '#invite';
    $oAllianceController->insertMessage($args);
   } else {
    return new Object(-1, $output->message ? $output->message : 'msg_failed_invite');
   }

   // 메시지 지정
   $this->setMessage('succeed_invite');
  }

  /**
   * @brief 사이트 초대 수락
   */
  function procAllianceAdminAccept() {
   $domain = Context::get('domain');

   // 넘어온 도메인이 없으면 에러
   if(!$domain) return new Object(-1, 'msg_invalid_domain');

   // allianceXE의 controller class
   $oAllianceController = &getController('alliance');

   // 요청을 보냄
   $buff = $oAllianceController->sendRequest('accept', $domain);
   if(!$buff) return new Object(-1, 'msg_failed_accept');

   // JSON class
   $this->loadJSON($json);

   // JSON 디코딩
   $output = $json->decode($buff);

   // 성공 시
   if($output->message == 'success') {
    $alliance_info = $output->alliance_info;

    // 연합 이름을 구함
    $alliance_title = $alliance_info->title->body;
    $count = $alliance_info->count->body + 1;

    // 트랜젝션 시작
    $oDB = &DB::getInstance();
    $oDB->begin();

    // 연합 정보를 DB에 등록
    $args->parent_domain = $domain;
    $args->title = $alliance_title;
    $args->count = $count;
    $output = $oAllianceController->insertAllianceInfo($args);

    // 에러 발생 시 되돌림
    if(!$output->toBool()) {
     $oDB->rollback();
     return new Object(-1, 'msg_failed_accept');
    }

    // 수락 상태로 변경
    $output = $oAllianceController->acceptSite($domain);
    if(!$output->toBool()) {
     $oDB->rollback();
     return new Object(-1, 'msg_failed_accept');
    }

    // 메시지 등록
    $args->domain = $this->cleanDomain($domain);
    $args->type = 'S';
    $args->title = 'Acceptance Message';
    $args->content = '#accept';
    $output = $oAllianceController->insertMessage($args);
    if(!$output->toBool()) {
     $oDB->rollback();
     return $output;
    }

    // 다른 사이트가 있다면 추가
    if($alliance_info->site_list) {
     foreach($alliance_info->site_list->site as $key => $val) {
      $title = $val->attrs->title;
      $domain = $val->attrs->domain;

      // 자기 자신은 추가하지 않음
      if($domain == $this->current_url) continue;

      // 친구 사이트로 추가
      $output = $oAllianceController->insertFriendSite($domain, $title, true);
      if(!$output->toBool()) {
       $oDB->rollback();
       return $output;
      }
     }
    }

    // commit
    $oDB->commit();
   } else {
    return new Object(-1, $output->message);
   }

   // 초대 메시지 삭제
   $oAllianceController->deleteInvitationMessages($domain);

   // 메시지 지정
   $this->setMessage('succeed_accept');
  }

  /**
   * @brief 사이트 초대 거부
   */
  function procAllianceAdminRefuse() {
   $domain = Context::get('domain');
   if(!$domain) return new Object(-1, 'msg_invalid_domain');

   // allianceXE의 controller class
   $oAllianceController = &getController('alliance');

   // 요청을 보냄
   $buff = $oAllianceController->sendRequest('refuse', $domain);
   if(!$buff) return new Object(-1, 'msg_failed_refused');

   // JSON class
   $this->loadJSON($json);

   // JSON 디코딩
   $output = $json->decode($buff);

   // 성공 시에
   if($output->message == 'success') {
    // 메시지 등록
    $args->domain = $this->cleanDomain($domain);
    $args->type = 'S';
    $args->title = 'Refusal Message';
    $args->content = '#refuse';
    $output = $oAllianceController->insertMessage($args);
    if(!$output->toBool()) return $output;
   } else {
    return new Object(-1, $output->message);
   }

   // 메시지 지정
   $this->setMessage('succeed_refused');
  }

  /**
   * @brief 사이트 제목 수정
   */
  function procAllianceAdminModifySite() {
   $site_srl = (int)Context::get('site_srl');
   if(!$site_srl) return new Object(-1, 'msg_invalid_request');

   $title = trim(Context::get('title'));
   if(!$title) return new Object(-1, 'msg_input_title');

   $args->site_srl = $site_srl;
   $args->title = $title;
   $output = executeQuery('alliance.updateSite', $args);
   if(!$output->toBool()) return $output;

   // 완료 후 이동할 Action명이 있다면 지정
   $redirect_act = Context::get('redirect_act');
   $this->add('redirect_act', $redirect_act);

   // 메시지 수정
   $this->setMessage('success_updated');
  }

  /**
   * @brief 연합 메시지 삭제
   */
  function procAllianceAdminDeleteMessage() {
   $message_srl = (int)Context::get('message_srl');
   if(!$message_srl) return new Object(-1, 'msg_invalid_request');

   $args->message_srl = $message_srl;
   $output = executeQuery('alliance.deleteMessage', $args);
   if(!$output->toBool()) return $output;

   $this->setMessage('success_deleted');
  }

  /**
   * @brief 다수의 연합 메시지 삭제
   */
  function procAllianceAdminDeleteMessages() {
   $message_srls = Context::get('cart');
   if(!$message_srls) return new Object(-1, 'msg_not_exists_selected_messages');

   $message_srl = explode('|@|', $message_srls);
   $message_srl = implode(',', $message_srl);

   $args->message_srl = $message_srl;
   $output = executeQuery('alliance.deleteMessages', $args);
   if(!$output->toBool()) return $output;

   $this->setMessage('success_deleted');
  }

  /**
   * @brief 스킨 정보 업데이트
   **/
  function procAllianceAdminUpdateSkinInfo() {
   // allianceXE의 model class
   $oAllianceModel = &getModel('alliance');

   // 기존의 설정을 구함
   $config = $oAllianceModel->getModuleConfig();

   $skin = $config->skin->skin;

   // module의 model class
   $oModuleModel = &getModel('module');

   // 스킨의 정보를 구해옴 (extra_vars를 체크하기 위해서)
   $skin_info = $oModuleModel->loadSkinInfo($this->module_path, $skin);
   $skin_vars = $config->skin->extra_vars;

   // 입력받은 변수들을 체크 (act, module_srl, page, mid, module등 기본적인 변수들 없앰)
   $obj = Context::getRequestVars();
   unset($obj->_filter);
   unset($obj->body);
   unset($obj->act);
   unset($obj->page);
   unset($obj->mid);
   unset($obj->module);

   // 원 skin_info에서 extra_vars의 type이 image일 경우 별도 처리를 해줌
   if($skin_info->extra_vars) {
    foreach($skin_info->extra_vars as $vars) {
     if($vars->type!='image') continue;

     $image_obj = $obj->{$vars->name};

     // 삭제 요청에 대한 변수를 구함
     $del_var = $obj->{"del_".$vars->name};
     unset($obj->{"del_".$vars->name});
     if($del_var == 'Y') {
      FileHandler::removeFile($skin_vars[$vars->name]->value);
      continue;
     }

     // 업로드 되지 않았다면 이전 데이터를 그대로 사용
     if(!$image_obj['tmp_name']) {
      $obj->{$vars->name} = $skin_vars[$vars->name]->value;
      continue;
     }

     // 정상적으로 업로드된 파일이 아니면 무시
     if(!is_uploaded_file($image_obj['tmp_name'])) {
      unset($obj->{$vars->name});
      continue;
     }

     // 이미지 파일이 아니어도 무시
     if(!preg_match("/\.(jpg|jpeg|gif|png)$/i", $image_obj['name'])) {
      unset($obj->{$vars->name});
      continue;
     }

     // 경로를 정해서 업로드
     $path = './files/attach/images/alliance/';

     // 디렉토리 생성
     if(!FileHandler::makeDir($path)) return false;

     $filename = $path.$image_obj['name'];

     // 파일 이동
     if(!move_uploaded_file($image_obj['tmp_name'], $filename)) {
      unset($obj->{$vars->name});
      continue;
     }

     // 정상 파일 업로드
     FileHandler::removeFile($skin_vars[$vars->name]->value);

     // 변수를 바꿈
     unset($obj->{$vars->name});
     $obj->{$vars->name} = $filename;
    }
   }

   // 스킨 설정에 수정 사항 반영
   $config->skin->extra_vars = serialize($obj);

   // module의 controller class
   $oModuleController = &getController('module');

   // 수정
   $oModuleController->insertModuleConfig('alliance', $config);

   $this->setLayoutPath('./common/tpl');
   $this->setLayoutFile('default_layout.html'+ ');
   $this->setTemplatePath('./modules/module/tpl');
   $this->setTemplateFile("top_refresh.html");
  }

  /**
   * @brief 콘텐츠 완전 삭제
   */
  function procAllianceAdminDeleteContent() {
   $content_id = Context::get('content_id');
   if(!$content_id) return new Object(-1, 'msg_invalid_request');

   // 넘어온 콘텐츠 ID로 문서 번호를를 구함
   $content_args->content_id = $content_id;
   $output = executeQuery('alliance.getDocumentSrlByContentId', $content_args);
   if(!$output->toBool()) return $output;

   $document_srl = $output->data->document_srl;

   // document의 controller class
   $oDocumentController = &getController('document');

   // 문서 삭제
   $output = $oDocumentController->deleteDocument($document_srl, true);
   if(!$output->toBool()) return $output;

   // allianceXE의 model class
   $oAllianceModel = &getModel('alliance');

   // 연합 정보를 구함
   $alliance_info = $oAllianceModel->getAllianceInfo();

   // 연합 정보가 없다면 에러
   if(!$alliance_info) return new Object(-1, 'msg_invalid_request');

   // allianceXE의 controller class
   $oAllianceController = &getController('alliance');

   $params['content_id'] = $content_id;

   // 사이트를 구함
   $args->s_status = 'accepted'+ ';
   $site_list = $oAllianceModel->getSites($args);

   // 각 사이트에 요청을 보냄
   if(count($site_list)) {
    foreach($site_list as $key => $val) {
     $oAllianceController->sendRequest('deleteDocument', $val->domain, $params);
    }
   }

   // 메시지 지정
   $this->setMessage('+ 'succeed_delete');
  }

  /**
   * @brief 콘텐츠 발행 취소
   */
  function procAllianceAdminCancleContentSync() {
   $content_id = Context::get('content_id');
   if(!$content_id) return new Object(-1, 'msg_invalid_request');

   // allianceXE의 model class
   $oAllianceModel = &getModel('alliance');

   // 연합 정보를 구함
   $alliance_info = $oAllianceModel->getAllianceInfo();

   // 연합 정보가 없다면 에러
   if(!$alliance_info) return new Object(-1, 'msg_invalid_request');

   // 사이트를 구함
   $args->s_status = 'accepted';
   $site_list = $oAllianceModel->getSites($args);
   if(count($site_list)) {
    $params['content_id'] = $content_id;

    foreach($site_list as $key => $val) {
     $oAllianceController->sendRequest('deleteDocument', $val->domain, $params);
    }
   }

   // 메시지 지정
   $this->setMessage('succeed_delete');
  }

  /**
   * @brief 연합 생성
   */
  function procAllianceAdminCreate() {
   // allianceXE의 model class
   $oAllianceModel = &getModel('alliance');

   // 연합 정보를 구함
   $alliance_info = $oAllianceModel->getAllianceInfo();

   // 이미 연합에 소속되어 있으면 에러
   if($alliance_info) return new Object(-1, 'msg_invalid_access');

   // 넘어온 설정을 구함
   $args = Context::getRequestVars();

   // 넘어온 값 정리
   $this->_trim($args->alliance_title);
   $config->alliance_info->title = $args->alliance_title;
   $config->alliance_info->count = 1;

   // 연합 설정 저장
   $oModuleController = &getController('module');
   $output = $oModuleController->insertModuleConfig('alliance', $config);
   if(!$output->toBool()) return $output;

   // allianceXE의 controller class
   $oAllianceController = &getController('alliance');

   // 연합 정보 등록
   $current_url = $this->current_url;
   $args->parent_domain = $current_url;
   $args->title = $args->alliance_title;
   $args->count = 1;
   $oAllianceController->insertAllianceInfo($args);

   $this->setMessage('succeed_created');
  }

  /**
   * @brief 연합 탈퇴
   */
  function procAllianceAdminLeave($alliance_info = null) {
   @set_time_limit(0);

   // allianceXE의 model class
   $oAllianceModel = &getModel('alliance');

   // allianceXE의 controller class
   $oAllianceController = &getController('alliance');

   // 연합 정보를 구함
   if(!$alliance_info) $alliance_info = $oAllianceModel->getAllianceInfo();

   // 연합 관리자 권한이 있으면 탈퇴할 수 없다
   if($oAllianceModel->isGranted($alliance_info)) return new Object(-1, 'msg_not_permitted');

   // 등록된 사이트 목록을 구함
   $site_list = $oAllianceModel->getSites($args);

   // 탈퇴 통보를 보냄
   if(count($site_list)) {
    foreach($site_list as $key => $val) {
     $oAllianceController->sendRequest('leave', $val->domain);
    }
   }

   // document의 controller class
   $oDocumentController = &getController('document');

   // 등록된 콘텐츠를 500개 단위로 끊어서 삭제
   $page = 1;
   do {
    $args->page = $page;
    $output = executeQueryArray('alliance.getAllContents', $args);
    if(!$output->toBool()) return $output;

    if($output->data) {
     $document_srls = array();

     foreach($output->data as $key => $val) {
      if(!$val->document_srl) continue;
      if($val->site_srl < 1) {
       $document_srls[] = $document_srl;
       continue;
      }
      $document_srl = $val->target_srl;
      $document_srls[] = $document_srl;
      $output = $oDocumentController->deleteDocument($document_srl, true);
      if(!$output->toBool()) return $output;
     }

     if(count($document_srls)) {
      $document_srls = implode(',', $document_srls);

      $args->document_srls = $document_srls;
      $output = executeQueryArray('alliance.deleteContents', $args);
      if(!$output->toBool()) return $output;
     } else {
      if(!$output->page_navigation->getNextPage()) break;
     }
    }

    $page++;
   } while($output->data && $output->page_navigation->getNextPage());

   // 연합 정보 삭제
   $oAllianceController->deleteAllianceInfo();

   // 등록된 모든 연합 정보 삭제
   executeQuery('alliance.deleteAllSites');
   executeQuery('alliance.deleteAllMessages');
   executeQuery('alliance.deleteAllMembers');
   executeQuery('alliance.deleteAllAuths');

   $this->setMessage('succeed_a_leaved');
  }

  /**
   * @brief 연합 해체
   */
  function procAllianceAdminBreakup($alliance_info = null) {
   @set_time_limit(0);

   // allianceXE의 model class
   $oAllianceModel = &getModel('alliance');

   // allianceXE의 controller class
   $oAllianceController = &getController('alliance');

   // 연합 정보를 구함
   if(!$alliance_info) $alliance_info = $oAllianceModel->getAllianceInfo();

   // 연합 관리자 권한이 있는지 판별
   if(!$oAllianceModel->isGranted($alliance_info)) return new Object(-1, 'msg_not_permitted');

   // 등록된 사이트 목록을 구함
   $site_list = $oAllianceModel->getSites();

   // 각 사이트에 해체 통보를 보냄
   if(count($site_list)) {
    foreach($site_list as $key => $val) $oAllianceController->sendRequest('breakup', $val->domain);
   }

   // document의 controller class
   $oDocumentController = &getController('document');

   // 등록된 콘텐츠를 500개 단위로 끊어서 삭제
   $page = 1;
   do {
    $args->page = $page;
    $output = executeQueryArray('alliance.getAllContents', $args);
    if(!$output->toBool()) return $output;

    if($output->data) {
     $document_srls = array();

     foreach($output->data as $key => $val) {
      if(!$document_srl) continue;
      if($val->site_srl < 1) {
       $document_srls[] = $document_srl;
       continue;
      }
      $document_srl = $val->target_srl;
      $document_srls[] = $document_srl;
      $output = $oDocumentController->deleteDocument($document_srl, true);
      if(!$output->toBool()) return $output;
     }

     if(count($document_srls)) {
      $document_srls = implode(',', $document_srls);

      $args->document_srls = $document_srls;
      $output = executeQueryArray('alliance.deleteContents', $args);
      if(!$output->toBool()) return $output;
     } else {
      if(!$output->page_navigation->getNextPage()) break;
     }
    }

    $page++;
   } while($output->data && $output->page_navigation->getNextPage());

   // 연합 정보 삭제
   $oAllianceController->deleteAllianceInfo();

   // 등록된 모든 연합 정보 삭제
   executeQuery('alliance.deleteAllSites');
   executeQuery('alliance.deleteAllMessages');
   executeQuery('alliance.deleteAllMembers');
   executeQuery('alliance.deleteAllAuths');

   $this->setMessage('succeed_breakup');
  }

  /**
   * @brief 연합 추방
   */
  function procAllianceAdminKick() {
   // allianceXE의 model class
   $oAllianceModel = &getModel('alliance');

   // 연합 정보를 구함
   $alliance_info = $oAllianceModel->getAllianceInfo();

   // 연합 관리자 권한이 있는지 판별
   if(!$oAllianceModel->isGranted($alliance_info)) return new Object(-1, 'msg_not_permitted');

   // 요청받은 사이트 번호를 구함
   $site_srl = (int)Context::get('site_srl');
   if(!$site_srl) return new Object(-1, 'msg_invalid_request');

   // 요청받은 사이트의 정보를 구함
   $site_info = $oAllianceModel->getSiteInfoBySiteSrl($site_srl);
   if(!$site_info) return new Object(-1, 'msg_invalid_request');

   $domain = $site_info->domain;

   // allianceXE의 controller class
   $oAllianceController = &getController('alliance');

   // 해당 사이트에 추방 통보를 보냄
   $oAllianceController->sendRequest('kick', $domain);

   // document의 controller class
   $oDocumentController = &getController('document');

   // 등록된 콘텐츠를 500개 단위로 끊어서 삭제
   $page = 1;
   do {
    // 해당 사이트의 모든 컨텐츠를 구함
    $args->site_srl = $site_info->site_srl;
    $args->page = $page;
    $output = executeQueryArray('alliance.getAllContents', $args);
    if(!$output->toBool()) return $output;

    // 등록된 컨텐츠가 있다면 삭제 시도
    if($output->data) {
     $document_srls = array();

     foreach($output->data as $key => $val) {
      $document_srl = $val->target_srl;
      $document_srls[] = $document_srl;

      // 문서 삭제
      $output = $oDocumentController->deleteDocument($document_srl, true);
      if(!$output->toBool()) return $output;
     }

     // 삭제한 문서가 있다면
     if(count($document_srls)) {
      $document_srls = implode(',', $document_srls);

      $args->document_srls = $document_srls;

      // 콘텐츠 DB에서 삭제
      $output = executeQueryArray('alliance.deleteContents'+ ', $args);
      if(!$output->toBool()) return $output;
     } else {
      // 더 이상 삭제할 것이 없다면 중단
      if(!$output->page_navigation->getNextPage()) break;
     }
    }

    $page++;
   } while($output->data && $output->page_navigation->getNextPage());

   // 삭제
   $oAllianceController->deleteSite($site_info->site_srl); 
  }

  /**
   * @brief 회원 정보 일괄 동기화
   */
  function procAllianceAdminBatchMemberSync() {
   $output = executeQueryArray('alliance.getSyncTargetMembers');
   if(!$output->toBool()) return $output;
   if(!$output->data) return new Object(-1, 'alert_not_exists_sync_target_member');

   // allianceXE의 model class
   $oAllianceModel = &getModel('alliance');

   // 동기화할 수 있는 사이트를 구함
   $site_args->s_status = 'accepted';
   $site_list = $oAllianceModel->getSites($site_args);

   if(!count($site_list)) return new Object(-1, 'alert_not_exists_sync_target_site');

   // allianceXE의 controller class
   $oAllianceController = &getController('alliance');

   // JSON class
   $this->loadJSON($json);

   $failed = 0;
   foreach($site_list as $key => $val) {
    foreach($output->data as $k => $member_info) {
     // 피라미터
     $params['ui'] = $this->_encode($member_info->user_id);
     $params['pp'] = $this->_encode($member_info->password);
     $params['+ 'ea'] = $this->_encode($member_info->email_address);
     $params['un'] = $this->_encode($member_info->user_name);
     $params['nn'] = $this->_encode($member_info->nick_name);

     // 동기화 요청
     $buff = $oAllianceController->sendRequest('syncMember', $val->domain, $params);
     if(!$buff) continue;

     if($a_sync[$member_info->member_srl]) continue;
     $output = $json->decode($buff);
     if(!$output) continue;

     if($output->message != 'success') {
      $failed++;
      continue;
     }

     // 회원 DB에 등록
     $oAllianceController->insertMember($member_info, $val->site_srl);

     // 인증 DB에 등록
     $oAllianceController->insertMemberAuth($member_info, $val->site_srl);

     $a_sync[$member_info->member_srl] = true;
    }
   }

   $msg_code = sprintf(Context::getLang('succeed_member_sync'), $failed);

   $this->setMessage($msg_code);
  }

  /**
   * @brief 콘텐츠 일괄 동기화
   */
  function procAllianceAdminBatchContentSync() {
   $output = executeQueryArray('alliance.getSyncTargetContents');
   if(!$output->toBool()) return $output;
   if(!$output->data) return new Object(-1, 'alert_not_exists_sync_target_contents.');

   // allianceXE의 model class
   $oAllianceModel = &getModel('alliance');

   // 설정을 구함
   $config = $oAllianceModel->getModuleConfig();

   if($config->sync->contents_sync != 'Y') return new Object(-1, 'alert_not_enabled_contents_sync');

   // 대상 모듈 정리
   $target_module_srl = array();
   if($config->sync->target_module_srl) $target_module_srl = explode(',', $config->sync->target_module_srl);

   // 동기화할 수 있는 사이트를 구함
   $site_args->s_status = 'accepted';
   $site_list = $oAllianceModel->getSites($site_args);

   if(!count($site_list)) return new Object(-1, 'alert_not_exists_sync_target_site');

   // allianceXE의 controller class
   $oAllianceController = &getController('alliance');

   // JSON class
   $this->loadJSON($json);

   // module의 model class
   $oModuleModel = &getModel('module');

   $failed = 0;
   foreach($site_list as $key => $val) {
    foreach($output->data as $k => $content) {
     $module_srl = $content->module_srl;

     // 대상 모듈에 포함되어 있는지 확인
     switch($config->sync->target) {
      case 'include':
       if(!in_array($module_srl, $target_module_srl)) continue;
       break;
      case 'exclude':
       if(in_array($module_srl, $target_module_srl)) continue;
       break;
     }

     if(!$module[$module_srl]) {
      $module[$module_srl] = $module_info = $oModuleModel->getModuleInfoByModuleSrl($module_srl);
     }

     $mid = $this->_encode($module[$module_srl]->mid);

     // 피라미터
     $params['md'] = $mid;
     $params['tt'] = $this->_encode($content->title);
     $params['cc'] = $this->_encode($content->content);
     $params['pp'] = $this->_encode($content->password);
     $params['ui'] = $this->_encode($content->user_id);
     $params['un'] = $this->_encode($content->user_name);
     $params['nn'] = $this->_encode($content->nick_name);
     $params['tg'] = $this->_encode($content->tags);
     $params['ia'] = $this->_encode($content->ipaddress);
     $params['ci'] = md5(getMicroTime());
     $params['call_by_alliancexe'] = 1;

     // 동기화 요청
     $buff = $oAllianceController->sendRequest('syncDocument', $val->domain, $params);
     if(!$buff) continue;

     if($a_sync[$member_info->member_srl]) continue;
     $output = $json->decode($buff);
     if(!$output) continue;

     if($output->message != 'success') {
      $failed++;
      continue;
     }

     // 회원 DB에 등록
     $oAllianceController->insertMember($member_info, 0);
     $oAllianceController->insertMember($member_info, $val->site_srl);

     // 인증 DB에 등록
     $oAllianceController->insertMemberAuth($member_info, $val->site_srl);

     $a_sync[$member_info->member_srl] = true;
    }
   }

   $msg_code = sprintf(Context::getLang('succeed_member_sync'), $failed);

   $this->setMessage($msg_code);
  }
 }
?>

글쓴이 제목 최종 글
XE 공지 글 쓰기,삭제 운영방식 변경 공지 [16] 2019.03.05 by 남기남
운영인 mysql 테이블에대한 질문입니다. 송동우님도와주세요 ㅠ_ㅠ [1] 2011.08.28 by 송동우
찐빵 댓글이 달렸을때 댓글갯수 색깔변경하기 [1] 2011.08.27 by 송동우
한스님 디자인 초보 질문 하나 드릴께요. [1] 2011.08.26 by 초급이
우영아빠 카테고리추가 및 수정이 갑자기 안되고 있습니다.  
콩콩아빠 제로보드4를 이용한 모바일 페이지 만들기? [1] 2011.08.26 by Hvillage
한스님 모바일 화면이 뜨지 않는 경우.  
Dolmey 레이아웃컬러 변경시 게시판 컬러도 자동으로변경 하기말인데요..  
맑은여름 [Q] 게시판의 특정글이 먹통이 됩니다..  
김노철 댓글에서도 인쇄기능을 추가하고자 합니다. [1] 2011.08.26
준돌이 콘텐츠 위젯스킨 랜덤으로 뜨게 할순 없나요?  
xe너무어렵다 안녕하세요^! 왼쪽클릭 도와주세욥^ [1] 2011.08.26 by tao
오대영582 설치시 오류 [1] 2011.08.26 by tao
유유히 로그인 안되여 ? [1] 2011.08.26 by tao
나우2006 메뉴에 새글표시.. 내용추가 [1] 2011.08.26 by tao
진실과 거짓말 로그인 페이지 [1] 2011.08.26 by tao
리남철 상단메뉴가 메인페이지 밑으로 [1] 2011.08.26 by tao
예은이다 여성 커뮤니티를 만들려고 하는데 어떤 레이아웃을 써야할지모르겠어요 [1] 2011.08.26 by tao
아드레날린 리스트 정렬 [1] 2011.08.26 by tao
狂浪 ip를 차단한적이 없는데 차단된 이용자라고 문의가 옵니다. [1] 2011.08.26 by tao
초급이 페이지를찾을수 없습니다. [1] file 2011.08.26 by tao
Cheolsae 댓글을 쓰지 않고 선택(라디오 다중 선택 단추) 할 수 없나요? [1] 2011.08.26 by tao
요키살앙 한달 째 똑같은 질문.... [1] 2011.08.26 by tao
이효준862 xe_member 테이블에 필드추가하기  
eibmoz 확장변수 관련해서 질문드립니다  
빛의바다 제로보드4에서 XE로 이전시 첨부파일은 어떻게 복구 하나요?? [1] 2011.08.26 by 송동우
잉여왕 프로필에 움직이는 그림은 못하나요? [1] 2011.08.26 by 송동우
여행객 배경이미지 랜덤 적용 [1] 2011.08.26 by 송동우
Yosida 회원정보 보기 누르면 포인트 보이는방법좀 알려주셨으면 합니다. [1] 2011.08.26 by 송동우
문성훈120 goddady.com 에서 xe 설치 방법 [2] 2011.08.25 by 문성훈120
키스미베이베 로고 클릭시 502 베드 게이트웨이라고 뜨내요 [1] 2011.08.25 by tao