コード例 #1
0
 /**
  * Really do the upload
  * Checks are made in SpecialUpload::execute()
  * @access private
  */
 function processUpload()
 {
     global $wgUser, $wgOut, $wrGedcomUploadDirectory, $wrGrepPath;
     /* Check for PHP error if any, requires php 4.2 or newer */
     // this must appear before the tree name check
     if ($this->mUploadError == 1) {
         $this->mainUploadForm(wfMsgHtml('largegedcom'));
         return;
     }
     /**
      * If there was no filename or a zero size given, give up quick.
      */
     if (trim($this->mOname) == '' || empty($this->mUploadSize)) {
         $this->mainUploadForm(wfMsgHtml('emptyfile'));
         return;
     }
     if ($this->mUploadError != 0) {
         $this->mainUploadForm('Error during upload.');
         return;
     }
     // get tree id
     if ($this->mTreeName == '[new]') {
         $treeName = $this->mNewTreeName;
     } else {
         $treeName = $this->mTreeName;
     }
     $dbr =& wfGetDB(DB_SLAVE);
     $tree = $dbr->selectRow('familytree', array('ft_tree_id', 'ft_person_count'), array('ft_user' => $wgUser->getName(), 'ft_name' => $treeName));
     if ($tree === false) {
         if (!$treeName) {
             $this->mainUploadForm('Please enter a name for your new tree');
             return;
         }
         if (!FamilyTreeUtil::isValidTreeName($treeName)) {
             $this->mainUploadForm('Sorry, that name contains characters that are not allowed in a tree name');
             return;
         } else {
             if (FamilyTreeUtil::createFamilyTree($dbr, $wgUser->getName(), $treeName) == FTE_SUCCESS) {
                 $tree = $dbr->selectRow('familytree', array('ft_tree_id', 'ft_person_count'), array('ft_user' => $wgUser->getName(), 'ft_name' => $treeName));
             }
             if ($tree === false) {
                 $this->mainUploadForm('Error creating tree');
                 return;
             }
         }
     }
     //   	else {
     //   		$this->mainUploadForm('This tree already exists.  You must import your GEDCOM into a new tree.');
     //   		return;
     //   	}
     // check if there are too many people in the file
     // HACK: set ft_person_count = -1 to allow people to upload GEDCOM's up to UPPER_MAX_PEOPLE
     //		$handle = popen($wrGrepPath.' -c "@ INDI" '.$this->mUploadTempName, 'r');  // use tr to translate from cr to lf so grep works for mac files
     $handle = popen('cat ' . $this->mUploadTempName . ' | tr \\\\r \\\\n | grep -c "@ INDI"', 'r');
     $cnt = fread($handle, 1024);
     pclose($handle);
     wfDebug("GEDCOM treeid={$tree->ft_tree_id} count={$cnt} person_count={$tree->ft_person_count}\n");
     if ($cnt > self::UPPER_MAX_PEOPLE || $tree->ft_person_count >= 0 && $cnt > self::LOWER_MAX_PEOPLE) {
         $this->mainUploadForm(wfMsgHtml('largegedcom'));
         return;
     }
     # Chop off any directories in the given filename
     $basename = wfBaseName($this->mOname);
     $dbw =& wfGetDB(DB_MASTER);
     $timestamp = wfTimestampNow();
     $record = array('fg_tree_id' => $tree->ft_tree_id, 'fg_gedcom_filename' => $basename, 'fg_status_date' => $timestamp, 'fg_file_size' => $this->mUploadSize, 'fg_default_country' => $this->mDefaultCountry, 'fg_status' => FG_STATUS_UPLOADED);
     $dbw->insert('familytree_gedcom', $record);
     $gedcomId = $dbw->selectField('', 'last_insert_id()', null);
     $destFilename = $wrGedcomUploadDirectory . '/' . $gedcomId . '.ged';
     wfSuppressWarnings();
     $success = move_uploaded_file($this->mUploadTempName, $destFilename);
     wfRestoreWarnings();
     if (!$success) {
         wfDebug("wfUploadGedcom error move={$destFilename}\n");
         $wgOut->showFileNotFoundError($this->mUploadTempName);
         return;
     }
     chmod($destFilename, 0644);
     $this->showSuccess($basename, $treeName);
 }
コード例 #2
0
ファイル: FamilyTreeUtil.php プロジェクト: k-hasan-19/wiki
 public static function renameFamilyTree($db, $userName, $treeName, $newTreeName, $renameExisting = false)
 {
     global $wgUser;
     $newTreeName = trim($newTreeName);
     if ($wgUser->isBlocked() || wfReadOnly()) {
         return FTE_NOT_AUTHORIZED;
     } else {
         if (!FamilyTreeUtil::isValidTreeName($treeName) || !FamilyTreeUtil::isValidTreeName($newTreeName)) {
             return FTE_INVALID_ARG;
         }
     }
     $status = FTE_SUCCESS;
     $treeId = $db->selectField('familytree', 'ft_tree_id', array('ft_user' => $userName, 'ft_name' => $treeName));
     $errno = $db->lastErrno();
     if ($errno > 0) {
         $status = FTE_DB_ERROR;
     } else {
         if ($treeId === false) {
             $status = FTE_NOT_FOUND;
         } else {
             $newTreeId = $db->selectField('familytree', 'ft_tree_id', array('ft_user' => $userName, 'ft_name' => $newTreeName));
             $errno = $db->lastErrno();
             if ($errno > 0) {
                 $status = FTE_DB_ERROR;
             } else {
                 if ($renameExisting && $newTreeId === false) {
                     $status = FTE_NOT_FOUND;
                 } else {
                     if (!$renameExisting && $newTreeId !== false) {
                         $status = FTE_DUP_KEY;
                     }
                 }
             }
         }
     }
     if ($status == FTE_SUCCESS) {
         if ($renameExisting) {
             // move pages
             if ($status == FTE_SUCCESS) {
                 $sql = "insert ignore into familytree_page (fp_tree_id, fp_namespace, fp_title, fp_oldid, fp_flags, fp_data_version, fp_latest, fp_talk_oldid, fp_talk_latest, fp_uid, fp_user_id) " . "(select " . $db->addQuotes($newTreeId) . ", fp_namespace, fp_title, fp_oldid, fp_flags, fp_data_version, fp_latest, fp_talk_oldid, fp_talk_latest, fp_uid, fp_user_id " . " from familytree_page where fp_tree_id=" . $db->addQuotes($treeId) . ")";
                 $db->query($sql, 'renameFamilyTree');
                 $errno = $db->lastErrno();
                 if ($errno > 0) {
                     $status = FTE_DB_ERROR;
                 }
             }
             if ($status == FTE_SUCCESS) {
                 $db->delete('familytree_page', array('fp_tree_id' => $treeId));
                 $errno = $db->lastErrno();
                 if ($errno > 0) {
                     $status = FTE_DB_ERROR;
                 }
             }
             // move data
             if ($status == FTE_SUCCESS) {
                 $sql = "insert ignore into familytree_data (fd_tree_id, fd_namespace, fd_title, fd_data) " . "(select " . $db->addQuotes($newTreeId) . ", fd_namespace, fd_title, fd_data " . " from familytree_data where fd_tree_id=" . $db->addQuotes($treeId) . ")";
                 $db->query($sql, 'renameFamilyTree');
                 $errno = $db->lastErrno();
                 if ($errno > 0) {
                     $status = FTE_DB_ERROR;
                 }
             }
             if ($status == FTE_SUCCESS) {
                 $db->delete('familytree_data', array('fd_tree_id' => $treeId));
                 $errno = $db->lastErrno();
                 if ($errno > 0) {
                     $status = FTE_DB_ERROR;
                 }
             }
             // update gedcoms
             if ($status == FTE_SUCCESS) {
                 $db->update('familytree_gedcom', array('fg_tree_id' => $newTreeId), array('fg_tree_id' => $treeId));
                 $errno = $db->lastErrno();
                 if ($errno > 0) {
                     $status = FTE_DB_ERROR;
                 }
             }
             // remove tree
             if ($status == FTE_SUCCESS) {
                 $db->delete('familytree', array('ft_tree_id' => $treeId));
                 FamilyTreeUtil::deleteFamilyTreesCache($userName);
                 $errno = $db->lastErrno();
                 if ($errno > 0) {
                     $status = FTE_DB_ERROR;
                 }
             }
         } else {
             $db->update('familytree', array('ft_name' => $newTreeName), array('ft_tree_id' => $treeId));
             FamilyTreeUtil::deleteFamilyTreesCache($userName);
             $errno = $db->lastErrno();
             if ($errno > 0) {
                 $status = FTE_DB_ERROR;
             }
         }
     }
     // re-index everything
     if ($status == FTE_SUCCESS) {
         $ts = wfTimestampNow();
         $sql = "insert into index_request (ir_page_id, ir_timestamp) select page_id, " . $db->addQuotes($ts) . " from familytree_page, page " . "where fp_tree_id = " . $db->addQuotes($renameExisting ? $newTreeId : $treeId) . " and fp_namespace = page_namespace and fp_title = page_title";
         $db->query($sql, 'renameFamilyTree');
         $errno = $db->lastErrno();
         if ($errno > 0) {
             $status = FTE_DB_ERROR;
         }
     }
     // purge user page
     StructuredData::purgeTitle(Title::makeTitle(NS_USER, $userName));
     return $status;
 }