Example #1
0
 /**
  * Deletes orphaned files older than 1 minute (due to postponed commits, that has not been used)
  */
 private function clearOrphanedPosts()
 {
     $deleteTimestamp = time() - self::DELETE_ORPHANED_POSTS_SECONDS;
     // Older than 1 minute
     $orphanedMenuItems = $this->database->get_col($this->database->prepare("SELECT ID FROM {$this->database->posts} AS p\n                LEFT JOIN {$this->database->postmeta} AS m ON p.ID = m.post_id\n                WHERE post_type = 'nav_menu_item'\n                AND post_status = 'draft' AND meta_key = '_menu_item_orphaned' AND meta_value < '%d'", $deleteTimestamp));
     foreach ((array) $orphanedMenuItems as $menuItemId) {
         wp_delete_post($menuItemId, true);
         $this->committer->discardPostponedCommit('menu-item-' . $menuItemId);
     }
 }
 /**
  * Returns all ids from DB suitable for given restriction.
  * E.g. all comment_id values where comment_post_id = 1
  * @param string $entityName
  * @param array $where
  * @return array
  */
 private function getIdsForRestriction($entityName, $where)
 {
     $idColumnName = $this->dbSchemaInfo->getEntityInfo($entityName)->idColumnName;
     $table = $this->dbSchemaInfo->getPrefixedTableName($entityName);
     $sql = "SELECT {$idColumnName} FROM {$table} WHERE ";
     $sql .= join(" AND ", array_map(function ($column) {
         return "`{$column}` = %s";
     }, array_keys($where)));
     $ids = $this->database->get_col($this->database->prepare($sql, $where));
     return $ids;
 }
 private function fixMnReferences()
 {
     $referencesToSave = $this->getExistingMnReferences();
     $vpIdsToLoad = $this->getAllVpIdsUsedInReferences($referencesToSave);
     $idMap = $this->getIdsForVpIds($vpIdsToLoad);
     $hasAllIds = $this->idMapContainsAllVpIds($idMap, $vpIdsToLoad);
     if (!$hasAllIds) {
         return false;
     }
     foreach ($referencesToSave as $reference => $relations) {
         if ($this->entityInfo->isVirtualReference($reference)) {
             continue;
         }
         $referenceDetails = ReferenceUtils::getMnReferenceDetails($this->dbSchema, $this->entityName, $reference);
         $prefixedTable = $this->database->prefix . $referenceDetails['junction-table'];
         $sourceColumn = $referenceDetails['source-column'];
         $targetColumn = $referenceDetails['target-column'];
         $valuesForInsert = array_map(function ($relation) use($idMap) {
             $sourceId = $idMap[$relation['vp_id']];
             $targetId = $idMap[$relation['referenced_vp_id']];
             return "({$sourceId}, {$targetId})";
         }, $relations);
         $sql = sprintf("SELECT id FROM %s WHERE HEX(vp_id) IN ('%s')", $this->database->vp_id, join("', '", array_map(function ($entity) {
             return $entity['vp_id'];
         }, $this->entities)));
         $processedIds = array_merge($this->database->get_col($sql), $this->deletedIds);
         if ($this->isSelectiveSynchronization) {
             if (count($processedIds) > 0) {
                 $this->database->query("DELETE FROM {$prefixedTable} WHERE {$sourceColumn} IN (" . join(", ", $processedIds) . ")");
             }
         } else {
             $this->database->query("TRUNCATE TABLE {$prefixedTable}");
         }
         $valuesString = join(", ", $valuesForInsert);
         $insertSql = "INSERT IGNORE INTO {$prefixedTable} ({$sourceColumn}, {$targetColumn}) VALUES {$valuesString}";
         $this->database->query($insertSql);
     }
     return true;
 }
 /**
  * @param $vpids
  * @param Database $database
  * @return mixed
  */
 private static function getIdsForVpids($vpids, $database)
 {
     $vpidsForRestriction = self::joinVpidsForRestriction($vpids);
     return $database->get_col("SELECT id FROM {$database->vp_id} WHERE vp_id IN ({$vpidsForRestriction})");
 }