|
From: <var...@us...> - 2021-08-14 14:54:59
|
Revision: 10516
http://sourceforge.net/p/phpwiki/code/10516
Author: vargenau
Date: 2021-08-14 14:54:57 +0000 (Sat, 14 Aug 2021)
Log Message:
-----------
PDO: function set_links merged from PearDB
Modified Paths:
--------------
trunk/lib/WikiDB/backend/PDO.php
Modified: trunk/lib/WikiDB/backend/PDO.php
===================================================================
--- trunk/lib/WikiDB/backend/PDO.php 2021-08-14 14:04:00 UTC (rev 10515)
+++ trunk/lib/WikiDB/backend/PDO.php 2021-08-14 14:54:57 UTC (rev 10516)
@@ -716,8 +716,6 @@
*
* @param string $pagename Page name
* @param array $links List of page(names) which page links to.
- *
- * on DEBUG: delete old, deleted links from page
*/
function set_links($pagename, $links)
{
@@ -730,40 +728,37 @@
$this->lock(array('link'));
$pageid = $this->_get_pageid($pagename, true);
+ $dbh->query("DELETE FROM $link_tbl WHERE linkfrom=$pageid");
if ($links) {
- $dbh->query("DELETE FROM $link_tbl WHERE linkfrom=$pageid");
+ $linkseen = array();
foreach ($links as $link) {
- if (isset($linkseen[$link]))
+ $linkto = $link['linkto'];
+ if ($linkto === "") { // ignore attributes
continue;
- $linkseen[$link] = true;
- $linkid = $this->_get_pageid($link, true);
+ }
+ if (isset($link['relation']))
+ $relation = $this->_get_pageid($link['relation'], true);
+ else
+ $relation = 0;
+ // avoid duplicates
+ if (isset($linkseen[$linkto]) and !$relation) {
+ continue;
+ }
+ if (!$relation) {
+ $linkseen[$linkto] = true;
+ }
+ $linkid = $this->_get_pageid($linkto, true);
+ if (!$linkid) {
+ echo("No link for $linkto on page $pagename");
+ trigger_error("No link for $linkto on page $pagename");
+ }
assert($linkid);
- $dbh->query("INSERT INTO $link_tbl (linkfrom, linkto)"
- . " VALUES ($pageid, $linkid)");
+ $dbh->query("INSERT INTO $link_tbl (linkfrom, linkto, relation)"
+ . " VALUES ($pageid, $linkid, $relation)");
}
- } elseif (DEBUG) {
- // purge page table: delete all non-referenced pages
- // for all previously linked pages...
- $sth = $dbh->prepare("SELECT $link_tbl.linkto as id FROM $link_tbl" .
- " WHERE linkfrom=$pageid");
- $sth->execute();
- foreach ($sth->fetchAll(PDO::FETCH_NUM) as $id) {
- // ...check if the page is empty and has no version
- $sth1 = $dbh->prepare("SELECT $page_tbl.id FROM $page_tbl"
- . " LEFT JOIN $nonempty_tbl USING (id) "
- . " LEFT JOIN $version_tbl USING (id)"
- . " WHERE ISNULL($nonempty_tbl.id) AND"
- . " ISNULL($version_tbl.id) AND $page_tbl.id=$id");
- $sth1->execute();
- if ($sth1->fetchColumn()) {
- $dbh->query("DELETE FROM $page_tbl WHERE id=$id"); // this purges the link
- $dbh->query("DELETE FROM $recent_tbl WHERE id=$id"); // may fail
- }
- }
- $dbh->query("DELETE FROM $link_tbl WHERE linkfrom=$pageid");
+ unset($linkseen);
}
$this->unlock(array('link'));
- return true;
}
/**
@@ -788,7 +783,7 @@
function get_links($pagename, $reversed = true, $include_empty = false,
$sortby = '', $limit = '', $exclude = '',
$want_relations = false)
-{
+ {
$dbh = &$this->_dbh;
extract($this->_table_names);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|