ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
ilPCParagraph Class Reference

Class ilPCParagraph. More...

+ Inheritance diagram for ilPCParagraph:
+ Collaboration diagram for ilPCParagraph:

Public Member Functions

 init ()
 Init page content component. More...
 
 setNode (&$a_node)
 Set Page Content Node. More...
 
 createAtNode (&$node)
 Create new page content (incl. More...
 
 createBeforeNode (&$node)
 Create new page content (incl. More...
 
 createAfter ($node)
 Create paragraph node (incl. More...
 
 create (&$a_pg_obj, $a_hier_id, $a_pc_id="")
 Create paragraph node (incl. More...
 
 setText ($a_text, $a_auto_split=false)
 Set (xml) content of text paragraph. More...
 
 getText ($a_short_mode=false)
 Get (xml) content of paragraph. More...
 
 getParagraphSequenceContent ($a_pg_obj)
 Get paragraph sequenc of current paragraph. More...
 
 setCharacteristic ($a_char)
 Set Characteristic of paragraph. More...
 
 getCharacteristic ()
 Get characteristic of paragraph. More...
 
 setSubCharacteristic ($a_char)
 set attribute subcharacteristic More...
 
 getAutoIndent ()
 Get AutoIndent (Code Paragraphs) More...
 
 setAutoIndent ($a_char)
 
 getSubCharacteristic ()
 get attribute subcharacteristic More...
 
 setDownloadTitle ($a_char)
 set attribute download title More...
 
 getDownloadTitle ()
 get attribute download title More...
 
 setShowLineNumbers ($a_char)
 set attribute showlinenumbers More...
 
 getShowLineNumbers ()
 get attribute showlinenumbers More...
 
 setLanguage ($a_lang)
 set language More...
 
 getLanguage ()
 get language More...
 
 input2xml ($a_text, $a_wysiwyg=0, $a_handle_lists=true)
 
 autoSplit ($a_text)
 This function splits a paragraph text that has been already processed with input2xml at each header position =header1=, ==header2== or ===header3=== and returns an array that contains the single chunks. More...
 
 handleNextBr ($a_str)
 Remove preceding
More...
 
 removeTrailingBr ($a_str)
 Remove trailing
More...
 
 getType ()
 Need to override getType from ilPageContent to distinguish between Pararagraph and Source. More...
 
 saveJS ($a_pg_obj, $a_content, $a_char, $a_pc_id, $a_insert_at="")
 Save input coming from ajax. More...
 
 getLastSavedPCId ($a_pg_obj, $a_as_ajax_str=false)
 Get last inserted pc ids. More...
 
 updatePage ($a_page)
 Update page object (it would be better to have this centralized and to change the constructors and pass the page object instead the dom object) More...
 
 autoLinkGlossaries ($a_glos)
 Auto link glossaries. More...
 
 saveAnchors ($a_page, $a_domdoc)
 Save anchors. More...
 
 saveMetaKeywords ($a_page, $a_domdoc)
 save all keywords More...
 
 getJavascriptFiles ($a_mode)
 Get Javascript files. More...
 
 getOnloadCode ($a_mode)
 Get onload code. More...
 
- Public Member Functions inherited from ilPageContent
 __construct ($a_pg_obj)
 Constructor. More...
 
 setPage ($a_val)
 Set page. More...
 
 getPage ()
 Get page. More...
 
 init ()
 Init object. More...
 
 getType ()
 Get type of page content. More...
 
 setNode (&$a_node)
 Set xml node of page content. More...
 
getNode ()
 Get xml node of page content. More...
 
 getJavascriptFiles ()
 Get Javascript files. More...
 
 getCssFiles ()
 Get css files. More...
 
 getOnloadCode ()
 Get on load code. More...
 
 setHierId ($a_hier_id)
 Set hierarchical ID in xml structure. More...
 
 getHierId ()
 Get hierarchical id. More...
 
 lookupHierId ()
 Get hierarchical id from dom. More...
 
 readHierId ()
 Read PC Id. More...
 
 setPcId ($a_pcid)
 Set PC Id. More...
 
 getPCId ()
 Get PC Id. More...
 
 readPCId ()
 Read PC Id. More...
 
 writePCId ($a_pc_id)
 Write pc id. More...
 
 isGreaterHierId ($a, $b)
 Check whether Hier ID $a is greater than Hier ID $b. More...
 
 setEnabled ($value)
 Set Enabled value for page content component. More...
 
 enable ()
 Enable page content. More...
 
 disable ()
 Disable page content. More...
 
 isEnabled ()
 Check whether page content is enabled. More...
 
 createPageContentNode ($a_set_this_node=true)
 Create page content node (always use this method first when adding a new element) More...
 
 modifyPageContentPostXsl ($a_output, $a_mode)
 Modify page content after xsl. More...
 

Static Public Member Functions

static _input2xml ($a_text, $a_lang, $a_wysiwyg=0, $a_handle_lists=true)
 converts user input to xml More...
 
static intLinks2xml ($a_text)
 internal links to xml More...
 
static input2xmlReplaceLists ($a_text)
 Converts xml from DB to output in edit textarea. More...
 
static xml2outputReplaceLists ($a_text)
 Replaces

with *. More...

 
static segmentString ($a_haystack, $a_needles)
 Segments a string into an array at each position of a substring. More...
 
static xml2output ($a_text, $a_wysiwyg=false, $a_replace_lists=true)
 Converts xml from DB to output in edit textarea. More...
 
static handleAjaxContent ($a_content)
 Handle ajax content. More...
 
static handleAjaxContentPost ($text)
 Post input2xml handling of ajax content. More...
 
static autoLinkGlossariesPage ($a_page, $a_terms)
 Auto link glossary of whole page. More...
 
static afterPageUpdate ($a_page, DOMDocument $a_domdoc, $a_xml, $a_creation)
 After page has been updated (or created) More...
 
static beforePageDelete ($a_page)
 Before page is being deleted. More...
 
static afterPageHistoryEntry ($a_page, DOMDocument $a_old_domdoc, $a_old_xml, $a_old_nr)
 After page history entry has been created. More...
 
static _deleteAnchors ($a_parent_type, $a_page_id, $a_page_lang)
 Delete anchors of a page. More...
 
static _saveAnchor ($a_parent_type, $a_page_id, $a_page_lang, $a_anchor_name)
 Save an anchor. More...
 
static _readAnchors ($a_parent_type, $a_page_id, $a_page_lang="-")
 Read anchors of a page. More...
 
- Static Public Member Functions inherited from ilPageContent
static incEdId ($ed_id)
 Increases an hierarchical editing id at lowest level (last number) More...
 
static decEdId ($ed_id)
 Decreases an hierarchical editing id at lowest level (last number) More...
 
static haveSameContainer ($ed_id1, $ed_id2)
 Check, if two ids are in same container. More...
 
static sortHierIds ($a_array)
 Sort an array of Hier IDS in ascending order. More...
 
static getLangVars ()
 Get lang vars needed for editing. More...
 
static handleCopiedContent (DOMDocument $a_domdoc, $a_self_ass=true, $a_clone_mobs=false)
 Handle copied content. More...
 
static afterPageUpdate ($a_page, DOMDocument $a_domdoc, $a_xml, $a_creation)
 After page has been updated (or created) More...
 
static beforePageDelete ($a_page)
 Before page is being deleted. More...
 
static afterPageHistoryEntry ($a_page, DOMDocument $a_old_domdoc, $a_old_xml, $a_old_nr)
 After page history entry has been created. More...
 

Data Fields

 $dom
 
 $par_node
 
- Data Fields inherited from ilPageContent
 $hier_id
 
 $node
 
 $dom
 

Static Protected Member Functions

static linkTermsInDom ($a_dom, $a_terms, $a_par_node=null)
 Link terms in a dom page object in bb style. More...
 

Additional Inherited Members

- Protected Member Functions inherited from ilPageContent
 setType ($a_type)
 Set Type. More...
 

Detailed Description

Class ilPCParagraph.

Paragraph of ilPageObject

Author
Alex Killing alex..nosp@m.kill.nosp@m.ing@g.nosp@m.mx.d.nosp@m.e
Version
$Id$

Definition at line 16 of file class.ilPCParagraph.php.

Member Function Documentation

◆ _deleteAnchors()

static ilPCParagraph::_deleteAnchors (   $a_parent_type,
  $a_page_id,
  $a_page_lang 
)
static

Delete anchors of a page.

Definition at line 1938 of file class.ilPCParagraph.php.

References $ilDB.

1939  {
1940  global $ilDB;
1941 
1942  $ilDB->manipulate("DELETE FROM page_anchor WHERE ".
1943  " page_parent_type = ".$ilDB->quote($a_parent_type, "text").
1944  " AND page_id = ".$ilDB->quote($a_page_id, "integer").
1945  " AND page_lang = ".$ilDB->quote($a_page_lang, "text")
1946  );
1947  }
global $ilDB

◆ _input2xml()

static ilPCParagraph::_input2xml (   $a_text,
  $a_lang,
  $a_wysiwyg = 0,
  $a_handle_lists = true 
)
static

converts user input to xml

Definition at line 495 of file class.ilPCParagraph.php.

References ilUtil\attribsToArray(), input2xmlReplaceLists(), and ilUtil\stripSlashes().

Referenced by input2xml(), ilPCDataTableGUI\update(), and ilPCDataTableGUI\updateJS().

496  {
497  if (!$a_wysiwyg)
498  {
499  $a_text = ilUtil::stripSlashes($a_text, false);
500  }
501 
502  if ($a_wysiwyg)
503  {
504  $a_text = str_replace("<br />", chr(10), $a_text);
505  }
506 
507  // note: the order of the processing steps is crucial
508  // and should be the same as in xml2output() in REVERSE order!
509  $a_text = trim($a_text);
510 
511 //echo "<br>between:".htmlentities($a_text);
512 
513  // mask html
514 if (!$a_wysiwyg)
515 {
516  $a_text = str_replace("&","&amp;",$a_text);
517 }
518  $a_text = str_replace("<","&lt;",$a_text);
519  $a_text = str_replace(">","&gt;",$a_text);
520 
521  // Reconvert PageTurn and BibItemIdentifier
522  $a_text = preg_replace('/&lt;([\s\/]*?PageTurn.*?)&gt;/i',"<$1>",$a_text);
523  $a_text = preg_replace('/&lt;([\s\/]*?BibItemIdentifier.*?)&gt;/i',"<$1>",$a_text);
524 
525 //echo "<br>second:".htmlentities($a_text);
526 
527  // mask curly brackets
528 /*
529 echo htmlentities($a_text);
530  $a_text = str_replace("{", "&#123;", $a_text);
531  $a_text = str_replace("}", "&#125;", $a_text);
532 echo htmlentities($a_text);*/
533  // linefeed to br
534  $a_text = str_replace(chr(13).chr(10),"<br />",$a_text);
535  $a_text = str_replace(chr(13),"<br />", $a_text);
536  $a_text = str_replace(chr(10),"<br />", $a_text);
537 
538  if ($a_handle_lists)
539  {
540  $a_text = ilPCParagraph::input2xmlReplaceLists($a_text);
541  }
542 
543  // remove empty tags
544  $atags = array("com", "emp", "str", "fn", "quot", "code", "acc", "imp", "kw", "sub", "sup");
545  foreach ($atags as $at)
546  {
547  $a_text = str_replace("[".$at."][/".$at."]", "", $a_text);
548  }
549 
550  // bb code to xml
551  $a_text = eregi_replace("\[com\]","<Comment Language=\"".$a_lang."\">",$a_text);
552  $a_text = eregi_replace("\[\/com\]","</Comment>",$a_text);
553  $a_text = eregi_replace("\[emp\]","<Emph>",$a_text);
554  $a_text = eregi_replace("\[\/emp\]","</Emph>",$a_text);
555  $a_text = eregi_replace("\[str\]","<Strong>",$a_text);
556  $a_text = eregi_replace("\[\/str\]","</Strong>",$a_text);
557  $a_text = eregi_replace("\[fn\]","<Footnote>",$a_text);
558  $a_text = eregi_replace("\[\/fn\]","</Footnote>",$a_text);
559  $a_text = eregi_replace("\[quot\]","<Quotation Language=\"".$a_lang."\">",$a_text);
560  $a_text = eregi_replace("\[\/quot\]","</Quotation>",$a_text);
561  $a_text = eregi_replace("\[code\]","<Code>",$a_text);
562  $a_text = eregi_replace("\[\/code\]","</Code>",$a_text);
563  $a_text = eregi_replace("\[acc\]","<Accent>",$a_text);
564  $a_text = eregi_replace("\[\/acc\]","</Accent>",$a_text);
565  $a_text = eregi_replace("\[imp\]","<Important>",$a_text);
566  $a_text = eregi_replace("\[\/imp\]","</Important>",$a_text);
567  $a_text = eregi_replace("\[kw\]","<Keyw>",$a_text);
568  $a_text = eregi_replace("\[\/kw\]","</Keyw>",$a_text);
569  $a_text = eregi_replace("\[sub\]","<Sub>",$a_text);
570  $a_text = eregi_replace("\[\/sub\]","</Sub>",$a_text);
571  $a_text = eregi_replace("\[sup\]","<Sup>",$a_text);
572  $a_text = eregi_replace("\[\/sup\]","</Sup>",$a_text);
573 
574  $a_text = self::intLinks2xml($a_text);
575 
576  // external link
577  $ws= "[ \t\r\f\v\n]*";
578  // remove empty external links
579  while (eregi("\[(xln$ws(url$ws=$ws\"([^\"])*\")$ws(target$ws=$ws(\"(Glossary|FAQ|Media)\"))?$ws)\]\[\/xln\]", $a_text, $found))
580  {
581  $a_text = str_replace($found[0], "",$a_text);
582  }
583  while (eregi("\[(xln$ws(url$ws=$ws(([^]])*)))$ws\]\[\/xln\]", $a_text, $found))
584  {
585  $a_text = str_replace($found[0], "",$a_text);
586  }
587  // external links
588  while (eregi("\[(xln$ws(url$ws=$ws\"([^\"])*\")$ws(target$ws=$ws(\"(Glossary|FAQ|Media)\"))?$ws)\]", $a_text, $found))
589  {
590  $attribs = ilUtil::attribsToArray($found[2]);
591  if (isset($attribs["url"]))
592  {
593  $a2 = ilUtil::attribsToArray($found[4]);
594  $tstr = "";
595  if (in_array($a2["target"], array("FAQ", "Glossary", "Media")))
596  {
597  $tstr = ' TargetFrame="'.$a2["target"].'"';
598  }
599  $a_text = str_replace("[".$found[1]."]", "<ExtLink Href=\"".$attribs["url"]."\"$tstr>", $a_text);
600  }
601  else
602  {
603  $a_text = str_replace("[".$found[1]."]", "[error: xln".$found[1]."]",$a_text);
604  }
605  }
606 
607  // ie/tinymce fix for links without "", see bug #8391
608  while (eregi("\[(xln$ws(url$ws=$ws(([^]])*)))$ws\]", $a_text, $found))
609  {
610  if ($found[3] != "")
611  {
612  $a_text = str_replace("[".$found[1]."]", "<ExtLink Href=\"".$found[3]."\">", $a_text);
613  }
614  else
615  {
616  $a_text = str_replace("[".$found[1]."]", "[error: xln".$found[1]."]",$a_text);
617  }
618  }
619  $a_text = eregi_replace("\[\/xln\]","</ExtLink>",$a_text);
620 
621  // anchor
622  $ws= "[ \t\r\f\v\n]*";
623  while (eregi("\[(anc$ws(name$ws=$ws\"([^\"])*\")$ws)\]", $a_text, $found))
624  {
625  $attribs = ilUtil::attribsToArray($found[2]);
626  $a_text = str_replace("[".$found[1]."]", "<Anchor Name=\"".$attribs["name"]."\">", $a_text);
627  }
628  $a_text = eregi_replace("\[\/anc\]","</Anchor>",$a_text);
629 //echo htmlentities($a_text); exit;
630  return $a_text;
631  }
static attribsToArray($a_str)
converts a string of format var1 = "val1" var2 = "val2" ...
static input2xmlReplaceLists($a_text)
Converts xml from DB to output in edit textarea.
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ _readAnchors()

static ilPCParagraph::_readAnchors (   $a_parent_type,
  $a_page_id,
  $a_page_lang = "-" 
)
static

Read anchors of a page.

Definition at line 1968 of file class.ilPCParagraph.php.

References $ilDB.

Referenced by ilInternalLinkGUI\showLinkHelp().

1969  {
1970  global $ilDB;
1971 
1972  $and_lang = ($a_page_lang != "")
1973  ? " AND page_lang = ".$ilDB->quote($a_page_lang, "text")
1974  : "";
1975 
1976  $set = $ilDB->query("SELECT * FROM page_anchor ".
1977  " WHERE page_parent_type = ".$ilDB->quote($a_parent_type, "text").
1978  " AND page_id = ".$ilDB->quote($a_page_id, "integer").
1979  $and_lang
1980  );
1981  $anchors = array();
1982  while ($rec = $ilDB->fetchAssoc($set))
1983  {
1984  $anchors[] = $rec["anchor_name"];
1985  }
1986  return $anchors;
1987  }
global $ilDB
+ Here is the caller graph for this function:

◆ _saveAnchor()

static ilPCParagraph::_saveAnchor (   $a_parent_type,
  $a_page_id,
  $a_page_lang,
  $a_anchor_name 
)
static

Save an anchor.

Definition at line 1952 of file class.ilPCParagraph.php.

References $ilDB.

1953  {
1954  global $ilDB;
1955 
1956  $ilDB->manipulate("INSERT INTO page_anchor ".
1957  "(page_parent_type, page_id, page_lang, anchor_name) VALUES (".
1958  $ilDB->quote($a_parent_type, "text").",".
1959  $ilDB->quote($a_page_id, "integer").",".
1960  $ilDB->quote($a_page_lang, "text").",".
1961  $ilDB->quote($a_anchor_name, "text").
1962  ")");
1963  }
global $ilDB

◆ afterPageHistoryEntry()

static ilPCParagraph::afterPageHistoryEntry (   $a_page,
DOMDocument  $a_old_domdoc,
  $a_old_xml,
  $a_old_nr 
)
static

After page history entry has been created.

Parameters
object$a_pagepage object
DOMDocument$a_old_domdocold dom document
string$a_old_xmlold xml
integer$a_old_nrhistory number

Definition at line 1906 of file class.ilPCParagraph.php.

1907  {
1908  }

◆ afterPageUpdate()

static ilPCParagraph::afterPageUpdate (   $a_page,
DOMDocument  $a_domdoc,
  $a_xml,
  $a_creation 
)
static

After page has been updated (or created)

Parameters
object$a_pagepage object
DOMDocument$a_domdocdom document
string$a_xmlxml
bool$a_creationtrue on creation, otherwise false

Definition at line 1880 of file class.ilPCParagraph.php.

1881  {
1882  // pc paragraph
1883  self::saveMetaKeywords($a_page, $a_domdoc);
1884  self::saveAnchors($a_page, $a_domdoc);
1885  }

◆ autoLinkGlossaries()

ilPCParagraph::autoLinkGlossaries (   $a_glos)

Auto link glossaries.

Parameters

Definition at line 1680 of file class.ilPCParagraph.php.

References $t, $text, ilObject\_lookupType(), ilGlossaryTerm\getTermList(), and getText().

1681  {
1682  if (is_array($a_glos) && count($a_glos) > 0)
1683  {
1684  include_once("./Modules/Glossary/classes/class.ilGlossaryTerm.php");
1685 
1686  // check which terms occur in the text (we may
1687  // get some false positives due to the strip_tags, but
1688  // we do not want to find strong or list or other stuff
1689  // within the tags
1690  $text = strip_tags($this->getText());
1691  $found_terms = array();
1692  foreach ($a_glos as $glo)
1693  {
1694  if (ilObject::_lookupType($glo) == "glo")
1695  {
1696  $terms = ilGlossaryTerm::getTermList($glo);
1697  foreach ($terms as $t)
1698  {
1699  if (is_int(stripos($text, $t["term"])))
1700  {
1701  $found_terms[$t["id"]] = $t;
1702  }
1703  }
1704  }
1705  }
1706 
1707  // did we find anything? -> modify content
1708  if (count($found_terms) > 0)
1709  {
1710  self::linkTermsInDom($this->dom, $found_terms, $this->par_node);
1711  }
1712  }
1713  }
getText($a_short_mode=false)
Get (xml) content of paragraph.
static getTermList($a_glo_id, $searchterm="", $a_first_letter="", $a_def="", $a_tax_node=0, $a_add_amet_fields=false, array $a_amet_filter=null)
Get all terms for given set of glossary ids.
static _lookupType($a_id, $a_reference=false)
lookup object type
$text
+ Here is the call graph for this function:

◆ autoLinkGlossariesPage()

static ilPCParagraph::autoLinkGlossariesPage (   $a_page,
  $a_terms 
)
static

Auto link glossary of whole page.

Parameters

Definition at line 1862 of file class.ilPCParagraph.php.

Referenced by ilObjContentObject\autoLinkGlossaryTerms().

1863  {
1864  $a_page->buildDom();
1865  $a_dom = $a_page->getDom();
1866 
1867  self::linkTermsInDom($a_dom, $a_terms);
1868 
1869  $a_page->update();
1870  }
+ Here is the caller graph for this function:

◆ autoSplit()

ilPCParagraph::autoSplit (   $a_text)

This function splits a paragraph text that has been already processed with input2xml at each header position =header1=, ==header2== or ===header3=== and returns an array that contains the single chunks.

Definition at line 1242 of file class.ilPCParagraph.php.

References $n, handleNextBr(), and removeTrailingBr().

Referenced by setText().

1243  {
1244  $a_text = str_replace ("=<SimpleBulletList>", "=<br /><SimpleBulletList>", $a_text);
1245  $a_text = str_replace ("=<SimpleNumberedList>", "=<br /><SimpleNumberedList>", $a_text);
1246  $a_text = str_replace ("</SimpleBulletList>=", "</SimpleBulletList><br />=", $a_text);
1247  $a_text = str_replace ("</SimpleNumberedList>=", "</SimpleNumberedList><br />=", $a_text);
1248  $a_text = "<br />".$a_text."<br />"; // add preceding and trailing br
1249 
1250  $chunks = array();
1251  $c_text = $a_text;
1252 //echo "0";
1253  while ($c_text != "")
1254  {
1255 //var_dump($c_text); flush();
1256 //echo "1";
1257  $s1 = strpos($c_text, "<br />=");
1258  if (is_int($s1))
1259  {
1260 //echo "2";
1261  $s2 = strpos($c_text, "<br />==");
1262  if (is_int($s2) && $s2 <= $s1)
1263  {
1264 //echo "3";
1265  $s3 = strpos($c_text, "<br />===");
1266  if (is_int($s3) && $s3 <= $s2) // possible level three header
1267  {
1268 //echo "4";
1269  $n = strpos($c_text, "<br />", $s3 + 1);
1270  if ($n > ($s3+9) && substr($c_text, $n-3, 9) == "===<br />")
1271  {
1272 //echo "5";
1273  // found level three header
1274  if ($s3 > 0 || $head != "")
1275  {
1276 //echo "6";
1277  $chunks[] = array("level" => 0,
1278  "text" => $this->removeTrailingBr($head.substr($c_text, 0, $s3)));
1279  $head = "";
1280  }
1281  $chunks[] = array("level" => 3,
1282  "text" => trim(substr($c_text, $s3+9, $n-$s3-12)));
1283  $c_text = $this->handleNextBr(substr($c_text, $n+6));
1284  }
1285  else
1286  {
1287 //echo "7";
1288  $head.= substr($c_text, 0, $n);
1289  $c_text = substr($c_text, $n);
1290  }
1291  }
1292  else // possible level two header
1293  {
1294 //echo "8";
1295  $n = strpos($c_text, "<br />", $s2 + 1);
1296  if ($n > ($s2+8) && substr($c_text, $n-2, 8) == "==<br />")
1297  {
1298 //echo "9";
1299  // found level two header
1300  if ($s2 > 0 || $head != "")
1301  {
1302 //echo "A";
1303  $chunks[] = array("level" => 0,
1304  "text" => $this->removeTrailingBr($head.substr($c_text, 0, $s2)));
1305  $head = "";
1306  }
1307  $chunks[] = array("level" => 2, "text" => trim(substr($c_text, $s2+8, $n-$s2-10)));
1308  $c_text = $this->handleNextBr(substr($c_text, $n+6));
1309  }
1310  else
1311  {
1312 //echo "B";
1313  $head.= substr($c_text, 0, $n);
1314  $c_text = substr($c_text, $n);
1315  }
1316  }
1317  }
1318  else // possible level one header
1319  {
1320 //echo "C";
1321  $n = strpos($c_text, "<br />", $s1 + 1);
1322  if ($n > ($s1+7) && substr($c_text, $n-1, 7) == "=<br />")
1323  {
1324 //echo "D";
1325  // found level one header
1326  if ($s1 > 0 || $head != "")
1327  {
1328 //echo "E";
1329  $chunks[] = array("level" => 0,
1330  "text" => $this->removeTrailingBr($head.substr($c_text, 0, $s1)));
1331  $head = "";
1332  }
1333  $chunks[] = array("level" => 1, "text" => trim(substr($c_text, $s1+7, $n-$s1-8)));
1334  $c_text = $this->handleNextBr(substr($c_text, $n+6));
1335 //echo "<br>ctext:".htmlentities($c_text)."<br>";
1336  }
1337  else
1338  {
1339  $head.= substr($c_text, 0, $n);
1340  $c_text = substr($c_text, $n);
1341 //echo "<br>head:".$head."c_text:".$c_text."<br>";
1342  }
1343  }
1344  }
1345  else
1346  {
1347 //echo "G";
1348  $chunks[] = array("level" => 0, "text" => $head.$c_text);
1349  $head = "";
1350  $c_text = "";
1351  }
1352  }
1353  if (count($chunks) == 0)
1354  {
1355  $chunks[] = array("level" => 0, "text" => "");
1356  }
1357 
1358 
1359  // remove preceding br
1360  if (substr($chunks[0]["text"], 0, 6) == "<br />")
1361  {
1362  $chunks[0]["text"] = substr($chunks[0]["text"], 6);
1363  }
1364 
1365  // remove trailing br
1366  if (substr($chunks[count($chunks) - 1]["text"],
1367  strlen($chunks[count($chunks) - 1]["text"]) - 6, 6) == "<br />")
1368  {
1369  $chunks[count($chunks) - 1]["text"] =
1370  substr($chunks[count($chunks) - 1]["text"], 0, strlen($chunks[count($chunks) - 1]["text"]) - 6);
1371  if ($chunks[count($chunks) - 1]["text"] == "")
1372  {
1373  unset($chunks[count($chunks) - 1]);
1374  }
1375  }
1376  return $chunks;
1377  }
removeTrailingBr($a_str)
Remove trailing
$n
Definition: RandomTest.php:80
handleNextBr($a_str)
Remove preceding
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ beforePageDelete()

static ilPCParagraph::beforePageDelete (   $a_page)
static

Before page is being deleted.

Parameters
object$a_pagepage object

Definition at line 1892 of file class.ilPCParagraph.php.

1893  {
1894  // delete anchors
1895  self::_deleteAnchors($a_page->getParentType(), $a_page->getId(), $a_page->getLanguage());
1896  }

◆ create()

ilPCParagraph::create ( $a_pg_obj,
  $a_hier_id,
  $a_pc_id = "" 
)

Create paragraph node (incl.

page content node) at given hierarchical ID.

Parameters
object$a_pg_objPage Object
string$a_hier_idHierarchical ID

Definition at line 108 of file class.ilPCParagraph.php.

References IL_INSERT_AFTER.

109  {
110 //echo "-$a_pc_id-";
111 //echo "<br>-".htmlentities($a_pg_obj->getXMLFromDom())."-<br><br>"; mk();
112  $this->node =& $this->dom->create_element("PageContent");
113 
114  // this next line kicks out placeholders, if something is inserted
115  $a_pg_obj->insertContent($this, $a_hier_id, IL_INSERT_AFTER, $a_pc_id);
116 
117  $this->par_node =& $this->dom->create_element("Paragraph");
118  $this->par_node =& $this->node->append_child($this->par_node);
119  $this->par_node->set_attribute("Language", "");
120  }
const IL_INSERT_AFTER

◆ createAfter()

ilPCParagraph::createAfter (   $node)

Create paragraph node (incl.

page content node) after given node.

Parameters
object$nodePredecessing node

Definition at line 84 of file class.ilPCParagraph.php.

References ilPageContent\$node, and ilPageContent\createPageContentNode().

85  {
86  $this->node = $this->createPageContentNode(false);
87  if($succ_node = $node->next_sibling())
88  {
89  $this->node = $succ_node->insert_before($this->node, $succ_node);
90  }
91  else
92  {
93  $parent_node = $node->parent_node();
94  $this->node = $parent_node->append_child($this->node);
95  }
96  $this->par_node = $this->dom->create_element("Paragraph");
97  $this->par_node = $this->node->append_child($this->par_node);
98  $this->par_node->set_attribute("Language", "");
99  }
createPageContentNode($a_set_this_node=true)
Create page content node (always use this method first when adding a new element) ...
+ Here is the call graph for this function:

◆ createAtNode()

ilPCParagraph::createAtNode ( $node)

Create new page content (incl.

paragraph) node at node

Parameters
object$nodeParent Node for Page Content

Definition at line 55 of file class.ilPCParagraph.php.

References ilPageContent\$node, and ilPageContent\createPageContentNode().

56  {
57  $this->node = $this->createPageContentNode();
58  $this->par_node =& $this->dom->create_element("Paragraph");
59  $this->par_node =& $this->node->append_child($this->par_node);
60  $this->par_node->set_attribute("Language", "");
61  $node->append_child ($this->node);
62  }
createPageContentNode($a_set_this_node=true)
Create page content node (always use this method first when adding a new element) ...
+ Here is the call graph for this function:

◆ createBeforeNode()

ilPCParagraph::createBeforeNode ( $node)

Create new page content (incl.

paragraph) node at node

Parameters
object$nodeParent Node for Page Content

Definition at line 69 of file class.ilPCParagraph.php.

References ilPageContent\$node, and ilPageContent\createPageContentNode().

70  {
71  $this->node = $this->createPageContentNode();
72  $this->par_node =& $this->dom->create_element("Paragraph");
73  $this->par_node =& $this->node->append_child($this->par_node);
74  $this->par_node->set_attribute("Language", "");
75  $node->insert_before($this->node, $node);
76  }
createPageContentNode($a_set_this_node=true)
Create page content node (always use this method first when adding a new element) ...
+ Here is the call graph for this function:

◆ getAutoIndent()

ilPCParagraph::getAutoIndent ( )

Get AutoIndent (Code Paragraphs)

Parameters
stringAuto Indent attribute

Definition at line 396 of file class.ilPCParagraph.php.

397  {
398  return $this->par_node->get_attribute("AutoIndent");
399  }

◆ getCharacteristic()

ilPCParagraph::getCharacteristic ( )

Get characteristic of paragraph.

Returns
string characteristic

Definition at line 364 of file class.ilPCParagraph.php.

Referenced by getType(), and setText().

365  {
366  if (is_object($this->par_node))
367  {
368  return $this->par_node->get_attribute("Characteristic");
369  }
370  }
+ Here is the caller graph for this function:

◆ getDownloadTitle()

ilPCParagraph::getDownloadTitle ( )

get attribute download title

Definition at line 446 of file class.ilPCParagraph.php.

447  {
448  return $this->par_node->get_attribute("DownloadTitle");
449  }

◆ getJavascriptFiles()

ilPCParagraph::getJavascriptFiles (   $a_mode)

Get Javascript files.

Definition at line 2069 of file class.ilPCParagraph.php.

References ilLinkifyUtil\getLocalJsPaths().

2070  {
2071  $adve_settings = new ilSetting("adve");
2072 
2073  if ($a_mode != "edit" && $adve_settings->get("auto_url_linking"))
2074  {
2075  include_once("./Services/Link/classes/class.ilLinkifyUtil.php");
2077  }
2078 
2079  return array();
2080  }
ILIAS Setting Class.
static getLocalJsPaths()
Get paths of necessary js files.
+ Here is the call graph for this function:

◆ getLanguage()

ilPCParagraph::getLanguage ( )

get language

Definition at line 482 of file class.ilPCParagraph.php.

Referenced by input2xml(), and setText().

483  {
484  return $this->par_node->get_attribute("Language");
485  }
+ Here is the caller graph for this function:

◆ getLastSavedPCId()

ilPCParagraph::getLastSavedPCId (   $a_pg_obj,
  $a_as_ajax_str = false 
)

Get last inserted pc ids.

Parameters

Definition at line 1491 of file class.ilPCParagraph.php.

References ilPageContent\$hier_id.

1492  {
1493  if ($a_as_ajax_str)
1494  {
1495  $a_pg_obj->stripHierIDs();
1496  $a_pg_obj->addHierIds();
1497  $ids = "###";
1498 //var_dump($this->inserted_pc_ids);
1499  $combined = $a_pg_obj->getHierIdsForPCIds(
1500  array($this->inserted_pc_id));
1501  foreach ($combined as $pc_id => $hier_id)
1502  {
1503 //echo "1";
1504  $ids.= $sep.$hier_id.":".$pc_id;
1505  $sep = ";";
1506  }
1507  $ids.= "###";
1508  return $ids;
1509  }
1510 
1511  return $this->inserted_pc_id;
1512  }

◆ getOnloadCode()

ilPCParagraph::getOnloadCode (   $a_mode)

Get onload code.

Parameters

Definition at line 2088 of file class.ilPCParagraph.php.

2089  {
2090  $adve_settings = new ilSetting("adve");
2091 
2092  if ($a_mode != "edit" && $adve_settings->get("auto_url_linking"))
2093  {
2094  return array("il.ExtLink.autolink('.ilc_Paragraph','ilc_link_ExtLink');");
2095  }
2096 
2097  return array();
2098  }
ILIAS Setting Class.

◆ getParagraphSequenceContent()

ilPCParagraph::getParagraphSequenceContent (   $a_pg_obj)

Get paragraph sequenc of current paragraph.

Definition at line 278 of file class.ilPCParagraph.php.

References ilPageContent\$hier_id, ilPageContent\readHierId(), ilPageContent\readPCId(), and ilPCParagraphGUI\xml2outputJS().

279  {
280  $childs = $this->par_node->parent_node()->parent_node()->child_nodes();
281  $seq = array();
282  $cur_seq = array();
283  $found = false;
284  $pc_id = $this->readPCId();
285  $hier_id = $this->readHierId();
286  for($i=0; $i<count($childs); $i++)
287  {
288  $pchilds = $childs[$i]->child_nodes();
289  if ($pchilds[0]->node_name() == "Paragraph" &&
290  $pchilds[0]->get_attribute("Characteristic") != "Code")
291  {
292  $cur_seq[] = $childs[$i];
293 
294  // check whether this is the sequence of the current paragraph
295  if ($childs[$i]->get_attribute("PCID") == $pc_id &&
296  $childs[$i]->get_attribute("HierId") == $hier_id)
297  {
298  $found = true;
299  }
300 
301  // if this is the current sequenc, get it
302  if ($found)
303  {
304  $seq = $cur_seq;
305  }
306  }
307  else
308  {
309  // non-paragraph element found -> init the current sequence
310  $cur_seq = array();
311  $found = false;
312  }
313  }
314 
315  $content = "";
316  $ids = "###";
317  $id_sep = "";
318  foreach ($seq as $p_node)
319  {
320  $ids.= $id_sep.$p_node->get_attribute("HierId").":".$p_node->get_attribute("PCID");
321  $po = $a_pg_obj->getContentObject($p_node->get_attribute("HierId"),
322  $p_node->get_attribute("PCID"));
323  $s_text = $po->getText();
324  $s_text = $po->xml2output($s_text, true, false);
325  $char = $po->getCharacteristic();
326  if ($char == "")
327  {
328  $char = "Standard";
329  }
330  $s_text = ilPCParagraphGUI::xml2outputJS($s_text, $char, $po->readPCId());
331  $content.= $s_text;
332  $id_sep = ";";
333  }
334  $ids.= "###";
335 
336  return $ids.$content;
337  }
static xml2outputJS($s_text, $char, $a_pc_id)
Prepare content for js output.
readPCId()
Read PC Id.
readHierId()
Read PC Id.
+ Here is the call graph for this function:

◆ getShowLineNumbers()

ilPCParagraph::getShowLineNumbers ( )

get attribute showlinenumbers

Definition at line 466 of file class.ilPCParagraph.php.

467  {
468  return $this->par_node->get_attribute("ShowLineNumbers");
469  }

◆ getSubCharacteristic()

ilPCParagraph::getSubCharacteristic ( )

get attribute subcharacteristic

Definition at line 419 of file class.ilPCParagraph.php.

420  {
421  return $this->par_node->get_attribute("SubCharacteristic");
422  }

◆ getText()

ilPCParagraph::getText (   $a_short_mode = false)

Get (xml) content of paragraph.

Returns
string Paragraph Content.

Definition at line 257 of file class.ilPCParagraph.php.

Referenced by autoLinkGlossaries().

258  {
259  if (is_object($this->par_node))
260  {
261  $content = "";
262  $childs = $this->par_node->child_nodes();
263  for($i=0; $i<count($childs); $i++)
264  {
265  $content .= $this->dom->dump_node($childs[$i]);
266  }
267  return $content;
268  }
269  else
270  {
271  return "";
272  }
273  }
+ Here is the caller graph for this function:

◆ getType()

ilPCParagraph::getType ( )

Need to override getType from ilPageContent to distinguish between Pararagraph and Source.

Definition at line 1417 of file class.ilPCParagraph.php.

References getCharacteristic().

1418  {
1419  return ($this->getCharacteristic() == "Code")?"src":parent::getType();
1420  }
getCharacteristic()
Get characteristic of paragraph.
+ Here is the call graph for this function:

◆ handleAjaxContent()

static ilPCParagraph::handleAjaxContent (   $a_content)
static

Handle ajax content.

Definition at line 1518 of file class.ilPCParagraph.php.

References $res, $ret, $text, ilPageContentGUI\_getCommonBBButtons(), ilDOM2Util\addParent(), ilDOM2Util\changeName(), ilDOM2Util\replaceByChilds(), and ilUtil\stripSlashes().

Referenced by ilPCDataTableGUI\updateJS().

1519  {
1520  $a_content = "<dummy>".$a_content."</dummy>";
1521 
1522  $doc = new DOMDocument();
1523 
1524  $content = ilUtil::stripSlashes($a_content, false);
1525 
1526 // $content = str_replace("&lt;", "<", $content);
1527 // $content = str_replace("&gt;", ">", $content);
1528 //echo "<br><br>".htmlentities($content); mk();
1529  $res = $doc->loadXML($content);
1530 
1531  if (!$res)
1532  {
1533  return false;
1534  }
1535 
1536  // convert tags
1537  $xpath = new DOMXpath($doc);
1538 
1539  $elements = $xpath->query("//span");
1540  include_once("./Services/Utilities/classes/class.ilDOM2Util.php");
1541  while (!is_null($elements) && !is_null($element = $elements->item(0)))
1542  {
1543  //$element = $elements->item(0);
1544  $class = $element->getAttribute("class");
1545  if (substr($class, 0, 16) == "ilc_text_inline_")
1546  {
1547  $class_arr = explode(" ", $class);
1548  $cnode = ilDOM2Util::changeName($element, "il".substr($class_arr[0], 16), false);
1549  for ($i = 1; $i < count($class_arr); $i++)
1550  {
1551  $cnode = ilDOM2Util::addParent($cnode, "il".substr($class_arr[$i], 16));
1552  }
1553  }
1554  else
1555  {
1556  ilDOM2Util::replaceByChilds($element);
1557  }
1558 
1559  $elements = $xpath->query("//span");
1560  }
1561 
1562  // convert tags
1563  $xpath = new DOMXpath($doc);
1564  $elements = $xpath->query("/dummy/div");
1565 
1566  $ret = array();
1567  if (!is_null($elements))
1568  {
1569  foreach ($elements as $element)
1570  {
1571  $id = $element->getAttribute("id");
1572  $class = $element->getAttribute("class");
1573  $class = substr($class, 15);
1574  if (trim($class) == "")
1575  {
1576  $class = "Standard";
1577  }
1578 
1579  $text = $doc->saveXML($element);
1580  $text = str_replace("<br/>", "\n", $text);
1581 
1582  // remove wrapping div
1583  $pos = strpos($text, ">");
1584  $text = substr($text, $pos + 1);
1585  $pos = strrpos($text, "<");
1586  $text = substr($text, 0, $pos);
1587 
1588  // todo: remove empty spans <span ...> </span>
1589 
1590  // replace tags by bbcode
1591  foreach (ilPageContentGUI::_getCommonBBButtons() as $bb => $cl)
1592  {
1593  if (!in_array($bb, array("code", "tex", "fn", "xln")))
1594  {
1595  $text = str_replace("<il".$cl.">",
1596  "[".$bb."]", $text);
1597  $text = str_replace("</il".$cl.">",
1598  "[/".$bb."]", $text);
1599  $text = str_replace("<il".$cl."/>", "", $text);
1600  }
1601  }
1602  $text = str_replace(array("<code>", "</code>"),
1603  array("[code]", "[/code]"), $text);
1604  $text = str_replace(array('<sup class="ilc_sup_Sup">', "</sup>"),
1605  array("[sup]", "[/sup]"), $text);
1606  $text = str_replace(array('<sub class="ilc_sub_Sub">', "</sub>"),
1607  array("[sub]", "[/sub]"), $text);
1608 
1609  $text = str_replace("<code/>", "", $text);
1610  $text = str_replace('<ul class="ilc_list_u_BulletedList"/>', "", $text);
1611  $text = str_replace('<ul class="ilc_list_o_NumberedList"/>', "", $text);
1612 
1613  $ret[] = array("text" => $text, "id" => $id, "class" => $class);
1614  }
1615  }
1616 
1617  // we should only have one here!
1618  return $ret[0];
1619  }
static replaceByChilds($node)
Replace a node by its child.
static changeName($node, $name, $keep_attributes=true)
Change name of a node.
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
static addParent($node, $name)
Add parent.
static _getCommonBBButtons()
Get common bb buttons.
$text
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ handleAjaxContentPost()

static ilPCParagraph::handleAjaxContentPost (   $text)
static

Post input2xml handling of ajax content.

Definition at line 1624 of file class.ilPCParagraph.php.

References $text.

Referenced by saveJS(), and ilPCDataTableGUI\updateJS().

1625  {
1626  $text = str_replace(array("&lt;ul&gt;", "&lt;/ul&gt;"),
1627  array("<SimpleBulletList>", "</SimpleBulletList>"), $text);
1628  $text = str_replace(array("&lt;ul class='ilc_list_u_BulletedList'&gt;", "&lt;/ul&gt;"),
1629  array("<SimpleBulletList>", "</SimpleBulletList>"), $text);
1630  $text = str_replace(array("&lt;ul class=\"ilc_list_u_BulletedList\"&gt;", "&lt;/ul&gt;"),
1631  array("<SimpleBulletList>", "</SimpleBulletList>"), $text);
1632  $text = str_replace(array("&lt;ol&gt;", "&lt;/ol&gt;"),
1633  array("<SimpleNumberedList>", "</SimpleNumberedList>"), $text);
1634  $text = str_replace(array("&lt;ol class='ilc_list_o_NumberedList'&gt;", "&lt;/ol&gt;"),
1635  array("<SimpleNumberedList>", "</SimpleNumberedList>"), $text);
1636  $text = str_replace(array("&lt;ol class=\"ilc_list_o_NumberedList\"&gt;", "&lt;/ol&gt;"),
1637  array("<SimpleNumberedList>", "</SimpleNumberedList>"), $text);
1638  $text = str_replace(array("&lt;li&gt;", "&lt;/li&gt;"),
1639  array("<SimpleListItem>", "</SimpleListItem>"), $text);
1640  $text = str_replace(array("&lt;li class='ilc_list_item_StandardListItem'&gt;", "&lt;/li&gt;"),
1641  array("<SimpleListItem>", "</SimpleListItem>"), $text);
1642  $text = str_replace(array("&lt;li class=\"ilc_list_item_StandardListItem\"&gt;", "&lt;/li&gt;"),
1643  array("<SimpleListItem>", "</SimpleListItem>"), $text);
1644 
1645  $text = str_replace(array("&lt;li class=\"ilc_list_item_StandardListItem\"/&gt;"),
1646  array("<SimpleListItem></SimpleListItem>"), $text);
1647 
1648  $text = str_replace("<SimpleBulletList><br />", "<SimpleBulletList>", $text);
1649  $text = str_replace("<SimpleNumberedList><br />", "<SimpleNumberedList>", $text);
1650  $text = str_replace("<br /><SimpleBulletList>", "<SimpleBulletList>", $text);
1651  $text = str_replace("<br /><SimpleNumberedList>", "<SimpleNumberedList>", $text);
1652  $text = str_replace("</SimpleBulletList><br />", "</SimpleBulletList>", $text);
1653  $text = str_replace("</SimpleNumberedList><br />", "</SimpleNumberedList>", $text);
1654  $text = str_replace("</SimpleListItem><br />", "</SimpleListItem>", $text);
1655 
1656  return $text;
1657  }
$text
+ Here is the caller graph for this function:

◆ handleNextBr()

ilPCParagraph::handleNextBr (   $a_str)

Remove preceding

Definition at line 1382 of file class.ilPCParagraph.php.

Referenced by autoSplit().

1383  {
1384  // do not remove, if next line starts with a "=", otherwise two
1385  // headlines in a row will not be recognized
1386  if (substr($a_str, 0, 6) == "<br />" && substr($a_str, 6, 1) != "=")
1387  {
1388  $a_str = substr($a_str, 6);
1389  }
1390  else
1391  {
1392  // if next line starts with a "=" we need to reinsert the <br />
1393  // otherwise it will not be recognized
1394  if (substr($a_str, 0, 1) == "=")
1395  {
1396  $a_str = "<br />".$a_str;
1397  }
1398  }
1399  return $a_str;
1400  }
+ Here is the caller graph for this function:

◆ init()

ilPCParagraph::init ( )

Init page content component.

Definition at line 25 of file class.ilPCParagraph.php.

References ilPageContent\setType().

26  {
27  $this->setType("par");
28  }
setType($a_type)
Set Type.
+ Here is the call graph for this function:

◆ input2xml()

ilPCParagraph::input2xml (   $a_text,
  $a_wysiwyg = 0,
  $a_handle_lists = true 
)

Definition at line 487 of file class.ilPCParagraph.php.

References _input2xml(), and getLanguage().

488  {
489  return $this->_input2xml($a_text, $this->getLanguage(), $a_wysiwyg, $a_handle_lists);
490  }
getLanguage()
get language
static _input2xml($a_text, $a_lang, $a_wysiwyg=0, $a_handle_lists=true)
converts user input to xml
+ Here is the call graph for this function:

◆ input2xmlReplaceLists()

static ilPCParagraph::input2xmlReplaceLists (   $a_text)
static

Converts xml from DB to output in edit textarea.

Parameters
string$a_textxml from db
Returns
string string ready for edit textarea

Definition at line 813 of file class.ilPCParagraph.php.

References $row, and $text.

Referenced by _input2xml(), and ilSCORM2004Asset\convertLists().

814  {
815  $rows = explode("<br />", $a_text."<br />");
816 //var_dump($a_text);
817 
818  $old_level = 0;
819 
820  $text = "";
821 
822  foreach ($rows as $row)
823  {
824  $level = 0;
825  if (str_replace("#", "*", substr($row, 0, 3)) == "***")
826  {
827  $level = 3;
828  }
829  else if (str_replace("#", "*", substr($row, 0, 2)) == "**")
830  {
831  $level = 2;
832  }
833  else if (str_replace("#", "*", substr($row, 0, 1)) == "*")
834  {
835  $level = 1;
836  }
837 
838  // end previous line
839  if ($level < $old_level)
840  {
841  for ($i = $old_level; $i > $level; $i--)
842  {
843  $text.= "</SimpleListItem></".$clist[$i].">";
844  }
845  if ($level > 0)
846  {
847  $text.= "</SimpleListItem>";
848  }
849  }
850  else if ($old_level > 0 && $level > 0 && ($level == $old_level))
851  {
852  $text.= "</SimpleListItem>";
853  }
854  else if (($level == $old_level) && $text != "")
855  {
856  $text.= "<br />";
857  }
858 
859  // start next line
860  if ($level > $old_level)
861  {
862  for($i = $old_level + 1; $i <= $level; $i++)
863  {
864  if (substr($row, $i - 1, 1) == "*")
865  {
866  $clist[$i] = "SimpleBulletList";
867  }
868  else
869  {
870  $clist[$i] = "SimpleNumberedList";
871  }
872  $text.= "<".$clist[$i]."><SimpleListItem>";
873  }
874  }
875  else if ($old_level > 0 && $level > 0)
876  {
877  $text.= "<SimpleListItem>";
878  }
879  $text.= substr($row, $level);
880 
881  $old_level = $level;
882  }
883 
884  // remove "<br />" at the end
885  if (substr($text, strlen($text) - 6) == "<br />")
886  {
887  $text = substr($text, 0, strlen($text) - 6);
888  }
889 
890  return $text;
891  }
$text
+ Here is the caller graph for this function:

◆ intLinks2xml()

static ilPCParagraph::intLinks2xml (   $a_text)
static

internal links to xml

Parameters

Definition at line 639 of file class.ilPCParagraph.php.

References $t, ilObjUser\_lookupId(), and ilUtil\attribsToArray().

640  {
641  global $objDefinition;
642 
643  $rtypes = $objDefinition->getAllRepositoryTypes();
644 
645  // internal links
646  //$any = "[^\]]*"; // this doesn't work :-(
647  $ws= "[ \t\r\f\v\n]*";
648  $ltypes = "page|chap|term|media|obj|dfile|sess|wpage|".implode($rtypes, "|");
649  // empty internal links
650  while (eregi("\[(iln$ws((inst$ws=$ws([\"0-9])*)?$ws".
651  "((".$ltypes.")$ws=$ws([\"0-9])*)$ws".
652  "(target$ws=$ws(\"(New|FAQ|Media)\"))?$ws(anchor$ws=$ws(\"([^\"])*\"))?$ws))\]\[\/iln\]", $a_text, $found))
653  {
654  $a_text = str_replace($found[0], "",$a_text);
655  }
656 
657  while (eregi("\[(iln$ws((inst$ws=$ws([\"0-9])*)?$ws".
658  "((".$ltypes.")$ws=$ws([\"0-9])*)$ws".
659  "(target$ws=$ws(\"(New|FAQ|Media)\"))?$ws(anchor$ws=$ws(\"([^\"])*\"))?$ws))\]", $a_text, $found))
660  {
661  $attribs = ilUtil::attribsToArray($found[2]);
662  $inst_str = $attribs["inst"];
663  // pages
664  if (isset($attribs["page"]))
665  {
666  $tframestr = "";
667  if (!empty($found[10]))
668  {
669  $tframestr = " TargetFrame=\"".$found[10]."\" ";
670  }
671  $ancstr = "";
672  if ($attribs["anchor"] != "")
673  {
674  $ancstr = ' Anchor="'.$attribs["anchor"].'" ';
675  }
676  $a_text = eregi_replace("\[".$found[1]."\]",
677  "<IntLink Target=\"il_".$inst_str."_pg_".$attribs[page]."\" Type=\"PageObject\"".$tframestr.$ancstr.">", $a_text);
678  }
679  // chapters
680  else if (isset($attribs["chap"]))
681  {
682  if (!empty($found[10]))
683  {
684  $tframestr = " TargetFrame=\"".$found[10]."\" ";
685  }
686  else
687  {
688  $tframestr = "";
689  }
690  $a_text = eregi_replace("\[".$found[1]."\]",
691  "<IntLink Target=\"il_".$inst_str."_st_".$attribs[chap]."\" Type=\"StructureObject\"".$tframestr.">", $a_text);
692  }
693  // glossary terms
694  else if (isset($attribs["term"]))
695  {
696  switch ($found[10])
697  {
698  case "New":
699  $tframestr = " TargetFrame=\"New\" ";
700  break;
701 
702  default:
703  $tframestr = " TargetFrame=\"Glossary\" ";
704  break;
705  }
706  $a_text = eregi_replace("\[".$found[1]."\]",
707  "<IntLink Target=\"il_".$inst_str."_git_".$attribs[term]."\" Type=\"GlossaryItem\" $tframestr>", $a_text);
708  }
709  // wiki pages
710  else if (isset($attribs["wpage"]))
711  {
712  $tframestr = "";
713 /* switch ($found[10])
714  {
715  case "New":
716  $tframestr = " TargetFrame=\"New\" ";
717  break;
718 
719  default:
720  $tframestr = " TargetFrame=\"Glossary\" ";
721  break;
722  }*/
723  $a_text = eregi_replace("\[".$found[1]."\]",
724  "<IntLink Target=\"il_".$inst_str."_wpage_".$attribs[wpage]."\" Type=\"WikiPage\" $tframestr>", $a_text);
725  }
726  // media object
727  else if (isset($attribs["media"]))
728  {
729  if (!empty($found[10]))
730  {
731  $tframestr = " TargetFrame=\"".$found[10]."\" ";
732  $a_text = eregi_replace("\[".$found[1]."\]",
733  "<IntLink Target=\"il_".$inst_str."_mob_".$attribs[media]."\" Type=\"MediaObject\"".$tframestr.">", $a_text);
734  }
735  else
736  {
737  $a_text = eregi_replace("\[".$found[1]."\]",
738  "<IntLink Target=\"il_".$inst_str."_mob_".$attribs[media]."\" Type=\"MediaObject\"/>", $a_text);
739  }
740  }
741  // direct download file (no repository object)
742  else if (isset($attribs["dfile"]))
743  {
744  $a_text = eregi_replace("\[".$found[1]."\]",
745  "<IntLink Target=\"il_".$inst_str."_dfile_".$attribs[dfile]."\" Type=\"File\">", $a_text);
746  }
747  // repository items (id is ref_id (will be used internally but will
748  // be replaced by object id for export purposes)
749  else
750  {
751  foreach ($objDefinition->getAllRepositoryTypes() as $t)
752  {
753  if (isset($attribs[$t]))
754  {
755  $obj_id = $attribs[$t];
756  }
757  }
758  if (isset($attribs["obj"]))
759  {
760  $obj_id = $attribs["obj"];
761  }
762 
763  if ($obj_id > 0)
764  {
765  if ($inst_str == "")
766  {
767  $a_text = eregi_replace("\[".$found[1]."\]",
768  "<IntLink Target=\"il_".$inst_str."_obj_".$obj_id."\" Type=\"RepositoryItem\">", $a_text);
769  }
770  else
771  {
772  $a_text = eregi_replace("\[".$found[1]."\]",
773  "<IntLink Target=\"il_".$inst_str."_".$found[6]."_".$obj_id."\" Type=\"RepositoryItem\">", $a_text);
774  }
775  }
776  else
777  {
778  $a_text = eregi_replace("\[".$found[1]."\]", "[error: iln".$found[1]."]",$a_text);
779  }
780  }
781  }
782  while (eregi("\[(iln$ws((inst$ws=$ws([\"0-9])*)?".$ws."media$ws=$ws([\"0-9])*)$ws)/\]", $a_text, $found))
783  {
784  $attribs = ilUtil::attribsToArray($found[2]);
785  $inst_str = $attribs["inst"];
786  $a_text = eregi_replace("\[".$found[1]."/\]",
787  "<IntLink Target=\"il_".$inst_str."_mob_".$attribs[media]."\" Type=\"MediaObject\"/>", $a_text);
788  }
789 
790  // user
791  while (eregi("\[(iln$ws((inst$ws=$ws([\"0-9])*)?".$ws."user$ws=$ws(\"([^\"])*)\")$ws)/\]", $a_text, $found))
792  {
793  $attribs = ilUtil::attribsToArray($found[2]);
794  $inst_str = $attribs["inst"];
795  include_once("./Services/User/classes/class.ilObjUser.php");
796  $user_id = ilObjUser::_lookupId($attribs[user]);
797  $a_text = eregi_replace("\[".$found[1]."/\]",
798  "<IntLink Target=\"il_".$inst_str."_user_".$user_id."\" Type=\"User\"/>", $a_text);
799  }
800 
801  $a_text = eregi_replace("\[\/iln\]","</IntLink>",$a_text);
802  return $a_text;
803  }
static attribsToArray($a_str)
converts a string of format var1 = "val1" var2 = "val2" ...
static _lookupId($a_user_str)
Lookup id by login.
+ Here is the call graph for this function:

◆ linkTermsInDom()

static ilPCParagraph::linkTermsInDom (   $a_dom,
  $a_terms,
  $a_par_node = null 
)
staticprotected

Link terms in a dom page object in bb style.

Parameters

Definition at line 1721 of file class.ilPCParagraph.php.

References ilPageContent\$node, $t, $text, DOMXML_LOAD_PARSING, domxml_open_mem(), ilUtil\sortArray(), ilStr\strIPos(), ilStr\strLen(), and ilStr\subStr().

1722  {
1723  // sort terms by their length (shortes first)
1724  // to prevent that nested tags are builded
1725  foreach ($a_terms as $k => $t)
1726  {
1727  $a_terms[$k]["termlength"] = strlen($t["term"]);
1728  }
1729  $a_terms = ilUtil::sortArray($a_terms, "termlength", "asc", true);
1730 
1731 
1732  if ($a_dom instanceof php4DOMDocument)
1733  {
1734  $a_dom = $a_dom->myDOMDocument;
1735  }
1736  if ($a_par_node instanceof php4DOMElement)
1737  {
1738  $a_par_node = $a_par_node->myDOMNode;
1739  }
1740 
1741  $xpath = new DOMXPath($a_dom);
1742 
1743  if ($a_par_node == null)
1744  {
1745  $parnodes = $xpath->query("//Paragraph[@Characteristic != 'Code']");
1746  }
1747  else
1748  {
1749  $parnodes = $xpath->query(".//Paragraph[@Characteristic != 'Code']", $a_par_node->parentNode);
1750  }
1751 
1752  include_once("./Services/Utilities/classes/class.ilStr.php");
1753 
1754  foreach ($parnodes as $parnode)
1755  {
1756  $textnodes = $xpath->query('.//text()', $parnode);
1757  foreach ($textnodes as $node)
1758  {
1759  $p = $node->getNodePath();
1760 
1761  // we do not change text nodes inside of links
1762  if (!is_int(strpos($p, "/IntLink")) &&
1763  !is_int(strpos($p, "/ExtLink")))
1764  {
1765  $node_val = $node->nodeValue;
1766 
1767  // all terms
1768  foreach ($a_terms as $t)
1769  {
1770  $pos = ilStr::strIPos($node_val, $t["term"]);
1771 
1772  // if term found
1773  while (is_int($pos))
1774  {
1775  // check if the string is not included in another word
1776  // note that []
1777  $valid_limiters = array("", " ","&nbsp;", ".", ",", ":", ";", "!", "?", "\"", "'", "(", ")");
1778  $b = ($pos > 0)
1779  ? ilStr::subStr($node_val, $pos - 1, 1)
1780  : "";
1781  $a = ilStr::subStr($node_val, $pos + ilStr::strLen($t["term"]), 1);
1782  if ((in_array($b, $valid_limiters) || htmlentities($b, null, 'utf-8') == "&nbsp;")&& in_array($a, $valid_limiters))
1783  {
1784  $mid = '[iln term="'.$t["id"].'"]'.
1785  ilStr::subStr($node_val, $pos, ilStr::strLen($t["term"])).
1786  "[/iln]";
1787 
1788  $node_val = ilStr::subStr($node_val, 0, $pos).
1789  $mid.
1790  ilStr::subStr($node_val, $pos + ilStr::strLen($t["term"]))
1791  ;
1792 
1793  $pos+= ilStr::strLen($mid);
1794  }
1795  else
1796  {
1797  $pos+= ilStr::strLen($t["term"]);
1798  }
1799  $pos = ilStr::strIPos($node_val, $t["term"], $pos);
1800  }
1801 
1802  // insert [iln] tags
1803  }
1804 
1805  $node->nodeValue = $node_val;
1806  }
1807 
1808 // var_dump($p);
1809 // var_dump($node->nodeValue);
1810  }
1811 
1812 
1813  // dump paragraph node
1814  $text = $a_dom->saveXML($parnode);
1815  $text = substr($text, 0, strlen($text) - strlen("</Paragraph>"));
1816  $text = substr($text, strpos($text, ">") + 1);
1817 
1818  // replace [iln] by tags with xml representation
1819  $text = self::intLinks2xml($text);
1820 
1821  // "set text"
1822  $temp_dom = domxml_open_mem('<?xml version="1.0" encoding="UTF-8"?><Paragraph>'.$text.'</Paragraph>',
1823  DOMXML_LOAD_PARSING, $error);
1824  $temp_dom = $temp_dom->myDOMDocument;
1825 
1826  if(empty($error))
1827  {
1828  // delete children of paragraph node
1829  $children = $parnode->childNodes;
1830  while ($parnode->hasChildNodes())
1831  {
1832  $parnode->removeChild($parnode->firstChild);
1833  }
1834 
1835  // copy new content children in paragraph node
1836  $xpath_temp = new DOMXPath($temp_dom);
1837  $temp_pars = $xpath_temp->query("//Paragraph");
1838 
1839  foreach ($temp_pars as $new_par_node)
1840  {
1841  $new_childs = $new_par_node->childNodes;
1842 
1843  foreach($new_childs as $new_child)
1844  {
1845  //$cloned_child = $new_child->cloneNode(true);
1846  $cloned_child = $a_dom->importNode($new_child, true);
1847  $parnode->appendChild($cloned_child);
1848  }
1849  }
1850  }
1851  }
1852 // exit;
1853  }
const DOMXML_LOAD_PARSING
domxml_open_mem($str, $mode=DOMXML_LOAD_PARSING, &$error=NULL)
static strLen($a_string)
Definition: class.ilStr.php:79
static sortArray($array, $a_array_sortby, $a_array_sortorder=0, $a_numeric=false, $a_keep_keys=false)
sortArray
php4DomElement
static strIPos($a_haystack, $a_needle, $a_offset=NULL)
Definition: class.ilStr.php:46
$text
static subStr($a_str, $a_start, $a_length=NULL)
Definition: class.ilStr.php:15
+ Here is the call graph for this function:

◆ removeTrailingBr()

ilPCParagraph::removeTrailingBr (   $a_str)

Remove trailing

Definition at line 1405 of file class.ilPCParagraph.php.

Referenced by autoSplit().

1406  {
1407  if (substr($a_str, strlen($a_str) - 6) == "<br />")
1408  {
1409  $a_str = substr($a_str, 0, strlen($a_str) - 6);
1410  }
1411  return $a_str;
1412  }
+ Here is the caller graph for this function:

◆ saveAnchors()

ilPCParagraph::saveAnchors (   $a_page,
  $a_domdoc 
)

Save anchors.

Parameters
stringxml page code

Definition at line 1915 of file class.ilPCParagraph.php.

References ilPageContent\$node.

1916  {
1917  self::_deleteAnchors($a_page->getParentType(), $a_page->getId(), $a_page->getLanguage());
1918 
1919  // get all anchors
1920  $xpath = new DOMXPath($a_domdoc);
1921  $nodes = $xpath->query('//Anchor');
1922  $saved = array();
1923  foreach ($nodes as $node)
1924  {
1925  $name = $node->getAttribute("Name");
1926  if (trim($name) != "" && !in_array($name, $saved))
1927  {
1928  self::_saveAnchor($a_page->getParentType(), $a_page->getId(), $a_page->getLanguage(), $name);
1929  $saved[] = $name;
1930  }
1931  }
1932 
1933  }

◆ saveJS()

ilPCParagraph::saveJS (   $a_pg_obj,
  $a_content,
  $a_char,
  $a_pc_id,
  $a_insert_at = "" 
)

Save input coming from ajax.

Parameters

Definition at line 1432 of file class.ilPCParagraph.php.

References $ilUser, $t, $text, exit, ilPageContent\getPage(), and handleAjaxContentPost().

1433  {
1434  global $ilUser;
1435 
1436  $t = self::handleAjaxContent($a_content);
1437  if ($text === false)
1438  {
1439  return false;
1440  }
1441 
1442  $pc_id = explode(":", $a_pc_id);
1443  $insert_at = explode(":", $a_insert_at);
1444  $t_id = explode(":", $t["id"]);
1445 
1446  // insert new paragraph
1447  if ($a_insert_at != "")
1448  {
1449  $par = new ilPCParagraph($this->getPage());
1450  $par->create($a_pg_obj, $insert_at[0], $insert_at[1]);
1451  }
1452  else
1453  {
1454  $par = $a_pg_obj->getContentObject($pc_id[0], $pc_id[1]);
1455  }
1456 
1457  if ($a_insert_at != "")
1458  {
1459  $pc_id = $a_pg_obj->generatePCId();
1460  $par->writePCId($pc_id);
1461  $this->inserted_pc_id = $pc_id;
1462  }
1463  else
1464  {
1465  $this->inserted_pc_id = $pc_id[1];
1466  }
1467 
1468  $par->setLanguage($ilUser->getLanguage());
1469  $par->setCharacteristic($t["class"]);
1470 
1471  $t2 = $par->input2xml($t["text"], true, false);
1473  $updated = $par->setText($t2, true);
1474 
1475  if ($updated !== true)
1476  {
1477  echo $updated; exit;
1478  return false;
1479  }
1480  $updated = $par->updatePage($a_pg_obj);
1481  //$updated = $a_pg_obj->update();
1482  return $updated;
1483  }
exit
Definition: login.php:54
static handleAjaxContentPost($text)
Post input2xml handling of ajax content.
Class ilPCParagraph.
global $ilUser
Definition: imgupload.php:15
$text
+ Here is the call graph for this function:

◆ saveMetaKeywords()

ilPCParagraph::saveMetaKeywords (   $a_page,
  $a_domdoc 
)

save all keywords

Parameters
object$a_pagepage object
object$a_domdocdom document

Definition at line 1995 of file class.ilPCParagraph.php.

References $lang, ilPageContent\$node, and ilUtil\stripSlashes().

1996  {
1997  // not nice, should be set by context per method
1998  if ($a_page->getParentType() == "gdf" ||
1999  $a_page->getParentType() == "lm")
2000  {
2001  // get existing keywords
2002  $keywords = array();
2003 
2004  // find all Keyw tags
2005  $xpath = new DOMXPath($a_domdoc);
2006  $nodes = $xpath->query('//Keyw');
2007  foreach($nodes as $node)
2008  {
2009  $k = trim(strip_tags($node->nodeValue));
2010  if (!in_array($k, $keywords))
2011  {
2012  $keywords[] = $k;
2013  }
2014  }
2015 
2016  $meta_type = ($a_page->getParentType() == "gdf")
2017  ? "gdf"
2018  : "pg";
2019  $meta_rep_id = $a_page->getParentId();
2020  $meta_id = $a_page->getId();
2021 
2022  include_once("./Services/MetaData/classes/class.ilMD.php");
2023  $md_obj = new ilMD($meta_rep_id, $meta_id, $meta_type);
2024  $mkeywords = array();
2025  $lang = "";
2026  if(is_object($md_section = $md_obj->getGeneral()))
2027  {
2028  foreach($ids = $md_section->getKeywordIds() as $id)
2029  {
2030  $md_key = $md_section->getKeyword($id);
2031  $mkeywords[] = strtolower($md_key->getKeyword());
2032  if ($lang == "")
2033  {
2034  $lang = $md_key->getKeywordLanguageCode();
2035  }
2036  }
2037  if ($lang == "")
2038  {
2039  foreach($ids = $md_section->getLanguageIds() as $id)
2040  {
2041  $md_lang = $md_section->getLanguage($id);
2042  if ($lang == "")
2043  {
2044  $lang = $md_lang->getLanguageCode();
2045  }
2046  }
2047  }
2048  foreach ($keywords as $k)
2049  {
2050  if (!in_array(strtolower($k), $mkeywords))
2051  {
2052  if (trim($k) != "" && $lang != "")
2053  {
2054  $md_key = $md_section->addKeyword();
2055  $md_key->setKeyword(ilUtil::stripSlashes($k));
2056  $md_key->setKeywordLanguage(new ilMDLanguageItem($lang));
2057  $md_key->save();
2058  }
2059  $mkeywords[] = strtolower($k);
2060  }
2061  }
2062  }
2063  }
2064  }
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
+ Here is the call graph for this function:

◆ segmentString()

static ilPCParagraph::segmentString (   $a_haystack,
  $a_needles 
)
static

Segments a string into an array at each position of a substring.

Definition at line 996 of file class.ilPCParagraph.php.

Referenced by xml2outputReplaceLists().

997  {
998  $segments = array();
999 
1000  $nothing_found = false;
1001  while (!$nothing_found)
1002  {
1003  $nothing_found = true;
1004  $found = -1;
1005  foreach($a_needles as $needle)
1006  {
1007  $pos = stripos($a_haystack, $needle);
1008  if (is_int($pos) && ($pos < $found || $found == -1))
1009  {
1010  $found = $pos;
1011  $found_needle = $needle;
1012  $nothing_found = false;
1013  }
1014  }
1015  if ($found > 0)
1016  {
1017  $segments[] = substr($a_haystack, 0, $found);
1018  $a_haystack = substr($a_haystack, $found);
1019  }
1020  if ($found > -1)
1021  {
1022  $segments[] = substr($a_haystack, 0, strlen($found_needle));
1023  $a_haystack = substr($a_haystack, strlen($found_needle));
1024  }
1025  }
1026  if ($a_haystack != "")
1027  {
1028  $segments[] = $a_haystack;
1029  }
1030 
1031  return $segments;
1032  }
+ Here is the caller graph for this function:

◆ setAutoIndent()

ilPCParagraph::setAutoIndent (   $a_char)

Definition at line 401 of file class.ilPCParagraph.php.

402  {
403  if (!empty($a_char))
404  {
405  $this->par_node->set_attribute("AutoIndent", $a_char);
406  }
407  else
408  {
409  if ($this->par_node->has_attribute("AutoIndent"))
410  {
411  $this->par_node->remove_attribute("AutoIndent");
412  }
413  }
414  }

◆ setCharacteristic()

ilPCParagraph::setCharacteristic (   $a_char)

Set Characteristic of paragraph.

Parameters
string$a_charCharacteristic

Definition at line 344 of file class.ilPCParagraph.php.

345  {
346  if (!empty($a_char))
347  {
348  $this->par_node->set_attribute("Characteristic", $a_char);
349  }
350  else
351  {
352  if ($this->par_node->has_attribute("Characteristic"))
353  {
354  $this->par_node->remove_attribute("Characteristic");
355  }
356  }
357  }

◆ setDownloadTitle()

ilPCParagraph::setDownloadTitle (   $a_char)

set attribute download title

Definition at line 428 of file class.ilPCParagraph.php.

429  {
430  if (!empty($a_char))
431  {
432  $this->par_node->set_attribute("DownloadTitle", $a_char);
433  }
434  else
435  {
436  if ($this->par_node->has_attribute("DownloadTitle"))
437  {
438  $this->par_node->remove_attribute("DownloadTitle");
439  }
440  }
441  }

◆ setLanguage()

ilPCParagraph::setLanguage (   $a_lang)

set language

Definition at line 474 of file class.ilPCParagraph.php.

475  {
476  $this->par_node->set_attribute("Language", $a_lang);
477  }

◆ setNode()

ilPCParagraph::setNode ( $a_node)

Set Page Content Node.

Parameters
object$a_nodePage Content DOM Node

Definition at line 35 of file class.ilPCParagraph.php.

36  {
37  parent::setNode($a_node); // this is the PageContent node
38 
39  $childs = $a_node->child_nodes();
40  for ($i=0; $i<count($childs); $i++)
41  {
42  if ($childs[$i]->node_name() == "Paragraph")
43  {
44  $this->par_node = $childs[$i]; //... and this the Paragraph node
45  }
46  }
47  }

◆ setShowLineNumbers()

ilPCParagraph::setShowLineNumbers (   $a_char)

set attribute showlinenumbers

Definition at line 455 of file class.ilPCParagraph.php.

456  {
457  $a_char = empty($a_char)?"n":$a_char;
458 
459  $this->par_node->set_attribute("ShowLineNumbers", $a_char);
460  }

◆ setSubCharacteristic()

ilPCParagraph::setSubCharacteristic (   $a_char)

set attribute subcharacteristic

Definition at line 376 of file class.ilPCParagraph.php.

377  {
378  if (!empty($a_char))
379  {
380  $this->par_node->set_attribute("SubCharacteristic", $a_char);
381  }
382  else
383  {
384  if ($this->par_node->has_attribute("SubCharacteristic"))
385  {
386  $this->par_node->remove_attribute("SubCharacteristic");
387  }
388  }
389  }

◆ setText()

ilPCParagraph::setText (   $a_text,
  $a_auto_split = false 
)

Set (xml) content of text paragraph.

Parameters
string$a_texttext content
boolean$a_auto_splitauto split paragraph at headlines true/false

Definition at line 128 of file class.ilPCParagraph.php.

References ilPageContent\$node, $ok, $path, $res, $t, $text, autoSplit(), DOMXML_LOAD_PARSING, domxml_open_mem(), getCharacteristic(), getLanguage(), ilPageContent\getPage(), xpath_eval(), and xpath_new_context().

129  {
130 
131 //var_dump($a_text);
132  if (!is_array($a_text))
133  {
134  $text = array(array("level" => 0, "text" => $a_text));
135  }
136  else
137  {
138  $text = $a_text;
139  }
140 
141  if ($a_auto_split)
142  {
143  $text = $this->autoSplit($a_text);
144  }
145 
146  // DOMXML_LOAD_PARSING, DOMXML_LOAD_VALIDATING, DOMXML_LOAD_RECOVERING
147  $check = "";
148  foreach ($text as $t)
149  {
150  $check.= "<Paragraph>".$t["text"]."</Paragraph>";
151  }
152  /*$temp_dom = domxml_open_mem('<?xml version="1.0" encoding="UTF-8"?><Paragraph>'.$text[0]["text"].'</Paragraph>',
153  DOMXML_LOAD_PARSING, $error);*/
154  $temp_dom = domxml_open_mem('<?xml version="1.0" encoding="UTF-8"?><Paragraph>'.$check.'</Paragraph>',
155  DOMXML_LOAD_PARSING, $error);
156 
157  //$this->text = $a_text;
158  // remove all childs
159  if(empty($error))
160  {
161  $temp_dom = domxml_open_mem('<?xml version="1.0" encoding="UTF-8"?><Paragraph>'.$text[0]["text"].'</Paragraph>',
162  DOMXML_LOAD_PARSING, $error);
163 
164  // delete children of paragraph node
165  $children = $this->par_node->child_nodes();
166  for($i=0; $i<count($children); $i++)
167  {
168  $this->par_node->remove_child($children[$i]);
169  }
170 
171  // copy new content children in paragraph node
172  $xpc = xpath_new_context($temp_dom);
173  $path = "//Paragraph";
174  $res =& xpath_eval($xpc, $path);
175  if (count($res->nodeset) == 1)
176  {
177  $new_par_node =& $res->nodeset[0];
178  $new_childs = $new_par_node->child_nodes();
179 
180  for($i=0; $i<count($new_childs); $i++)
181  {
182  $cloned_child =& $new_childs[$i]->clone_node(true);
183  $this->par_node->append_child($cloned_child);
184  }
185  $orig_characteristic = $this->getCharacteristic();
186 
187  // if headlines are entered and current characteristic is a headline
188  // use no characteristic as standard
189  if ((count($text) > 1) && (substr($orig_characteristic, 0, 8) == "Headline"))
190  {
191  $orig_characteristic = "";
192  }
193  if ($text[0]["level"] > 0)
194  {
195  $this->par_node->set_attribute("Characteristic", 'Headline'.$text[0]["level"]);
196  }
197  }
198 
199  $ok = true;
200 
201  $c_node = $this->node;
202  // add other chunks afterwards
203  for ($i=1; $i<count($text); $i++)
204  {
205  if ($ok)
206  {
207  $next_par = new ilPCParagraph($this->getPage());
208  $next_par->createAfter($c_node);
209  $next_par->setLanguage($this->getLanguage());
210  if ($text[$i]["level"] > 0)
211  {
212  $next_par->setCharacteristic("Headline".$text[$i]["level"]);
213  }
214  else
215  {
216  $next_par->setCharacteristic($orig_characteristic);
217  }
218  $ok = $next_par->setText($text[$i]["text"], false);
219  $c_node = $next_par->node;
220  }
221  }
222 
223  return true;
224  }
225  else
226  {
227  // We want the correct number of \n here to have the real lines numbers
228  $text = str_replace("<br>", "\n", $check); // replace <br> with \n to get correct line
229  $text = str_replace("<br/>", "\n", $text);
230  $text = str_replace("<br />", "\n", $text);
231  $text = str_replace("</SimpleListItem>", "</SimpleListItem>\n", $text);
232  $text = str_replace("<SimpleBulletList>", "\n<SimpleBulletList>", $text);
233  $text = str_replace("<SimpleNumberedList>", "\n<SimpleNumberedList>", $text);
234  $text = str_replace("<Paragraph>\n", "<Paragraph>", $text);
235  $text = str_replace("</Paragraph>", "</Paragraph>\n", $text);
236  include_once("./Services/Dom/classes/class.ilDomDocument.php");
237  $doc = new ilDOMDocument();
238  $text = '<?xml version="1.0" encoding="UTF-8"?><Paragraph>'.$text.'</Paragraph>';
239 //echo htmlentities($text);
240  $this->success = $doc->loadXML($text);
241  $error = $doc->errors;
242  $estr = "";
243  foreach ($error as $e)
244  {
245  $e = str_replace(" in Entity", "", $e);
246  $estr.= $e."<br />";
247  }
248  return $estr;
249  }
250  }
const DOMXML_LOAD_PARSING
domxml_open_mem($str, $mode=DOMXML_LOAD_PARSING, &$error=NULL)
xpath_new_context($dom_document)
xpath_eval($xpath_context, $eval_str, $contextnode=null)
Class ilPCParagraph.
getLanguage()
get language
getCharacteristic()
Get characteristic of paragraph.
autoSplit($a_text)
This function splits a paragraph text that has been already processed with input2xml at each header p...
$path
Definition: index.php:22
$text
+ Here is the call graph for this function:

◆ updatePage()

ilPCParagraph::updatePage (   $a_page)

Update page object (it would be better to have this centralized and to change the constructors and pass the page object instead the dom object)

Parameters

Definition at line 1666 of file class.ilPCParagraph.php.

References $ret.

1667  {
1668  $a_page->beforePageContentUpdate($this);
1669 
1670  $ret = $a_page->update();
1671  return $ret;
1672  }

◆ xml2output()

static ilPCParagraph::xml2output (   $a_text,
  $a_wysiwyg = false,
  $a_replace_lists = true 
)
static

Converts xml from DB to output in edit textarea.

Parameters
string$a_textxml from db
Returns
string string ready for edit textarea

Definition at line 1041 of file class.ilPCParagraph.php.

References $target_id, $target_type, ilObjUser\_lookupLogin(), ilObject\_lookupType(), ilUtil\attribsToArray(), and xml2outputReplaceLists().

Referenced by ilPCDataTableGUI\editData(), ilPCDataTableGUI\editDataCl(), ilPresentationListTableGUI\fillRow(), ilTermListTableGUI\fillRow(), and ilPageObject\getPageContentsHashes().

1042  {
1043  // note: the order of the processing steps is crucial
1044  // and should be the same as in input2xml() in REVERSE order!
1045 
1046  // xml to bb code
1047  $any = "[^>]*";
1048  $a_text = eregi_replace("<Comment[^>]*>","[com]",$a_text);
1049  $a_text = eregi_replace("</Comment>","[/com]",$a_text);
1050  $a_text = eregi_replace("<Comment/>","[com][/com]",$a_text);
1051  $a_text = eregi_replace("<Emph>","[emp]",$a_text);
1052  $a_text = eregi_replace("</Emph>","[/emp]",$a_text);
1053  $a_text = eregi_replace("<Emph/>","[emp][/emp]",$a_text);
1054  $a_text = eregi_replace("<Strong>","[str]",$a_text);
1055  $a_text = eregi_replace("</Strong>","[/str]",$a_text);
1056  $a_text = eregi_replace("<Strong/>","[str][/str]",$a_text);
1057  $a_text = eregi_replace("<Footnote[^>]*>","[fn]",$a_text);
1058  $a_text = eregi_replace("</Footnote>","[/fn]",$a_text);
1059  $a_text = eregi_replace("<Footnote/>","[fn][/fn]",$a_text);
1060  $a_text = eregi_replace("<Quotation[^>]*>","[quot]",$a_text);
1061  $a_text = eregi_replace("</Quotation>","[/quot]",$a_text);
1062  $a_text = eregi_replace("<Quotation/>","[quot][/quot]",$a_text);
1063  $a_text = eregi_replace("<Code[^>]*>","[code]",$a_text);
1064  $a_text = eregi_replace("</Code>","[/code]",$a_text);
1065  $a_text = eregi_replace("<Code/>","[code][/code]",$a_text);
1066  $a_text = eregi_replace("<Accent>","[acc]",$a_text);
1067  $a_text = eregi_replace("</Accent>","[/acc]",$a_text);
1068  $a_text = eregi_replace("<Important>","[imp]",$a_text);
1069  $a_text = eregi_replace("</Important>","[/imp]",$a_text);
1070  $a_text = eregi_replace("<Keyw>","[kw]",$a_text);
1071  $a_text = eregi_replace("</Keyw>","[/kw]",$a_text);
1072  $a_text = eregi_replace("<Sup>","[sup]",$a_text);
1073  $a_text = eregi_replace("</Sup>","[/sup]",$a_text);
1074  $a_text = eregi_replace("<Sub>","[sub]",$a_text);
1075  $a_text = eregi_replace("</Sub>","[/sub]",$a_text);
1076 
1077  // replace lists
1078  if ($a_replace_lists)
1079  {
1080 //echo "<br>".htmlentities($a_text);
1081  $a_text = ilPCParagraph::xml2outputReplaceLists($a_text);
1082 //echo "<br>".htmlentities($a_text);
1083  }
1084 
1085  // internal links
1086  while (eregi("<IntLink($any)>", $a_text, $found))
1087  {
1088  $found[0];
1089  $attribs = ilUtil::attribsToArray($found[1]);
1090  $target = explode("_", $attribs["Target"]);
1091  $target_id = $target[count($target) - 1];
1092  $inst_str = (!is_int(strpos($attribs["Target"], "__")))
1093  ? $inst_str = "inst=\"".$target[1]."\" "
1094  : $inst_str = "";
1095  switch($attribs["Type"])
1096  {
1097  case "PageObject":
1098  $tframestr = (!empty($attribs["TargetFrame"]))
1099  ? " target=\"".$attribs["TargetFrame"]."\""
1100  : "";
1101  $ancstr = (!empty($attribs["Anchor"]))
1102  ? ' anchor="'.$attribs["Anchor"].'"'
1103  : "";
1104  $a_text = eregi_replace("<IntLink".$found[1].">","[iln ".$inst_str."page=\"".$target_id."\"$tframestr$ancstr]",$a_text);
1105  break;
1106 
1107  case "StructureObject":
1108  $tframestr = (!empty($attribs["TargetFrame"]))
1109  ? " target=\"".$attribs["TargetFrame"]."\""
1110  : "";
1111  $a_text = eregi_replace("<IntLink".$found[1].">","[iln ".$inst_str."chap=\"".$target_id."\"$tframestr]",$a_text);
1112  break;
1113 
1114  case "GlossaryItem":
1115  $tframestr = (empty($attribs["TargetFrame"]) || $attribs["TargetFrame"] == "Glossary")
1116  ? ""
1117  : " target=\"".$attribs["TargetFrame"]."\"";
1118  $a_text = eregi_replace("<IntLink".$found[1].">","[iln ".$inst_str."term=\"".$target_id."\"".$tframestr."]",$a_text);
1119  break;
1120 
1121  case "WikiPage":
1122  $tframestr = "";
1123  /*$tframestr = (empty($attribs["TargetFrame"]) || $attribs["TargetFrame"] == "Glossary")
1124  ? ""
1125  : " target=\"".$attribs["TargetFrame"]."\"";*/
1126  $a_text = eregi_replace("<IntLink".$found[1].">","[iln ".$inst_str."wpage=\"".$target_id."\"".$tframestr."]",$a_text);
1127  break;
1128 
1129  case "MediaObject":
1130  if (empty($attribs["TargetFrame"]))
1131  {
1132  $a_text = eregi_replace("<IntLink".$found[1].">","[iln ".$inst_str."media=\"".$target_id."\"/]",$a_text);
1133  }
1134  else
1135  {
1136  $a_text = eregi_replace("<IntLink".$found[1].">","[iln media=\"".$target_id."\"".
1137  " target=\"".$attribs["TargetFrame"]."\"]",$a_text);
1138  }
1139  break;
1140 
1141  // Repository Item (using ref id)
1142  case "RepositoryItem":
1143  if ($inst_str == "")
1144  {
1146  }
1147  else
1148  {
1149  $rtype = $target[count($target) - 2];
1150  $target_type = $rtype;
1151  }
1152  $a_text = eregi_replace("<IntLink".$found[1].">","[iln ".$inst_str."$target_type=\"".$target_id."\"".$tframestr."]",$a_text);
1153  break;
1154 
1155  // Download File (not in repository, Object ID)
1156  case "File":
1157  $a_text = eregi_replace("<IntLink".$found[1].">","[iln ".$inst_str."dfile=\"".$target_id."\"".$tframestr."]",$a_text);
1158  break;
1159 
1160  // User
1161  case "User":
1162  include_once("./Services/User/classes/class.ilObjUser.php");
1163  $a_text = eregi_replace("<IntLink".$found[1].">","[iln ".$inst_str."user=\"".ilObjUser::_lookupLogin($target_id)."\"/]",$a_text);
1164  break;
1165 
1166  default:
1167  $a_text = eregi_replace("<IntLink".$found[1].">","[iln]",$a_text);
1168  break;
1169  }
1170  }
1171  $a_text = eregi_replace("</IntLink>","[/iln]",$a_text);
1172 
1173  // external links
1174  while (eregi("<ExtLink($any)>", $a_text, $found))
1175  {
1176  $found[0];
1177  $attribs = ilUtil::attribsToArray($found[1]);
1178  //$found[1] = str_replace("?", "\?", $found[1]);
1179  $tstr = "";
1180  if (in_array($attribs["TargetFrame"], array("FAQ", "Glossary", "Media")))
1181  {
1182  $tstr = ' target="'.$attribs["TargetFrame"].'"';
1183  }
1184  $a_text = str_replace("<ExtLink".$found[1].">","[xln url=\"".$attribs["Href"]."\"$tstr]",$a_text);
1185  }
1186  $a_text = eregi_replace("</ExtLink>","[/xln]",$a_text);
1187 
1188  // anchor
1189  while (eregi("<Anchor($any/)>", $a_text, $found))
1190  {
1191  $found[0];
1192  $attribs = ilUtil::attribsToArray($found[1]);
1193  $a_text = str_replace("<Anchor".$found[1].">","[anc name=\"".$attribs["Name"]."\"][/anc]",$a_text);
1194  }
1195  while (eregi("<Anchor($any)>", $a_text, $found))
1196  {
1197  $found[0];
1198  $attribs = ilUtil::attribsToArray($found[1]);
1199  $a_text = str_replace("<Anchor".$found[1].">","[anc name=\"".$attribs["Name"]."\"]",$a_text);
1200  }
1201  $a_text = eregi_replace("</Anchor>","[/anc]",$a_text);
1202 
1203 
1204  // br to linefeed
1205  if (!$a_wysiwyg)
1206  {
1207  $a_text = str_replace("<br />", "\n", $a_text);
1208  $a_text = str_replace("<br/>", "\n", $a_text);
1209  }
1210 
1211 if (!$a_wysiwyg)
1212 {
1213  // prevent curly brackets from being swallowed up by template engine
1214  $a_text = str_replace("{", "&#123;", $a_text);
1215  $a_text = str_replace("}", "&#125;", $a_text);
1216 
1217  // unmask html
1218  $a_text = str_replace("&lt;", "<", $a_text);
1219  $a_text = str_replace("&gt;", ">",$a_text);
1220 
1221  // this is needed to allow html like <tag attribute="value">... in paragraphs
1222  $a_text = str_replace("&quot;", "\"", $a_text);
1223 
1224  // make ampersands in (enabled) html attributes work
1225  // e.g. <a href="foo.php?n=4&t=5">hhh</a>
1226  $a_text = str_replace("&amp;", "&", $a_text);
1227 
1228  // make &gt; and $lt; work to allow (disabled) html descriptions
1229  $a_text = str_replace("&lt;", "&amp;lt;", $a_text);
1230  $a_text = str_replace("&gt;", "&amp;gt;", $a_text);
1231 }
1232  return $a_text;
1233  //return str_replace("<br />", chr(13).chr(10), $a_text);
1234  }
static _lookupLogin($a_user_id)
lookup login
static attribsToArray($a_str)
converts a string of format var1 = "val1" var2 = "val2" ...
static xml2outputReplaceLists($a_text)
Replaces with *.
$target_type
Definition: goto.php:87
$target_id
Definition: goto.php:88
static _lookupType($a_id, $a_reference=false)
lookup object type
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ xml2outputReplaceLists()

static ilPCParagraph::xml2outputReplaceLists (   $a_text)
static

Replaces

with *.

Parameters
string$a_textxml from db
Returns
string string containing * for lists

Definition at line 900 of file class.ilPCParagraph.php.

References $text, and segmentString().

Referenced by xml2output().

901  {
902  $segments = ilPCParagraph::segmentString($a_text, array("<SimpleBulletList>", "</SimpleBulletList>",
903  "</SimpleListItem>", "<SimpleListItem>", "<SimpleListItem/>", "<SimpleNumberedList>", "</SimpleNumberedList>"));
904 
905  $current_list = array();
906  $text = "";
907  for ($i=0; $i<= count($segments); $i++)
908  {
909  if ($segments[$i] == "<SimpleBulletList>")
910  {
911  if (count($current_list) == 0)
912  {
913  $list_start = true;
914  }
915  array_push($current_list, "*");
916  $li = false;
917  }
918  else if ($segments[$i] == "<SimpleNumberedList>")
919  {
920  if (count($current_list) == 0)
921  {
922  $list_start = true;
923  }
924  array_push($current_list, "#");
925  $li = false;
926  }
927  else if ($segments[$i] == "</SimpleBulletList>")
928  {
929  array_pop($current_list);
930  $li = false;
931  }
932  else if ($segments[$i] == "</SimpleNumberedList>")
933  {
934  array_pop($current_list);
935  $li = false;
936  }
937  else if ($segments[$i] == "<SimpleListItem>")
938  {
939  $li = true;
940  }
941  else if ($segments[$i] == "</SimpleListItem>")
942  {
943  $li = false;
944  }
945  else if ($segments[$i] == "<SimpleListItem/>")
946  {
947  if ($list_start)
948  {
949  $text.= "<br />";
950  $list_start = false;
951  }
952  foreach($current_list as $list)
953  {
954  $text.= $list;
955  }
956  $text.= "<br />";
957  $li = false;
958  }
959  else
960  {
961  if ($li)
962  {
963  if ($list_start)
964  {
965  $text.= "<br />";
966  $list_start = false;
967  }
968  foreach($current_list as $list)
969  {
970  $text.= $list;
971  }
972  }
973  $text.= $segments[$i];
974  if ($li)
975  {
976  $text.= "<br />";
977  }
978  $li = false;
979  }
980  }
981 
982  // remove trailing <br />, if text ends with list
983  if ($segments[count($segments) - 1] == "</SimpleBulletList>" ||
984  $segments[count($segments) - 1] == "</SimpleNumberedList>" &&
985  substr($text, strlen($text) - 6) == "<br />")
986  {
987  $text = substr($text, 0, strlen($text) - 6);
988  }
989 
990  return $text;
991  }
static segmentString($a_haystack, $a_needles)
Segments a string into an array at each position of a substring.
$text
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Field Documentation

◆ $dom

ilPCParagraph::$dom

Definition at line 18 of file class.ilPCParagraph.php.

Referenced by ilPCSourceCode\modifyPageContentPostXsl().

◆ $par_node

ilPCParagraph::$par_node

Definition at line 19 of file class.ilPCParagraph.php.


The documentation for this class was generated from the following file: