Jump to content


  • Posts

  • Joined

  • Last visited

  • Days Won


Everything posted by BillH

  1. @Robin S Thanks for the advice on debugging. I'd never noticed the $log stuff in PW before, and have been wondering whether the Tracey Debugger module might be a good idea. I've tried every bit of cache clearing I could think of, but perhaps there's something about CKEditor I missed I'll investigate further and report back.
  2. The bug seems to have returned. It's the same as before: the module doesn't work (the menu shows "No files for this page") if the user is not logged in as superuser. I'm using the latest version of the the module, 0.1.5. (And I'm getting the same problem with my own variants of the module.) I thought the issue might be caused changing to PW 3.0.98, but reverting to 3.0.96 and 3.0.62 doesn't help. In the browser, the Console isn't returning any errors, and there's nothing I recognize as relevant under Network. Something must have changed, but can't think what. In fact, not much (that I can remember) has changed on the back end of the site at all in the last week or so. I'm a bit stumped on what to try next!
  3. Excellent. All works fine now. Thanks @Robin S. B.t.w., if anyone is reading this thread, ignore the remarks in my first post about different browsers. I was just getting in a muddle with how I was logged in with each :-( Also worth noting is that CKEditor Link Files works in a really neat way and is great for adapting if you want to insert PW content into CKEditor text. I've actually built a couple of modules based on it, and have one or two more in mind!
  4. Thanks for getting back to me. I'll have a go with the changes this afternoon.
  5. I've created a module based almost entirely on this module, and my problem occurs both with my new module and the original. So even though CKE Insert Links has been incorporated into AOS, this seems the best place to post. My new module allows users to insert links from a list of page names. It is little more than the original module with some renaming of functions and variables, and getting a list of pages rather than a list of attached files; then the menu is displayed in a CKE dialog rather than from the toolbar. My new module and CKE Insert Links work fine in Firefox for all users, and work in Chrome for superusers. But they fail in Chrome (and Edge on early testing) if the user is not a superuser. The failure manifests itself with CKE Insert Links as the menu showing "No files for this page", and in my module with the equivalent error message. I have debugged as far as finding that the problem seems to be with the $.getJSON() function in plugin.js, which is failing to return anything. In the code below, if(data.length) is evaluating to false. Note that the new code is very close to the original module, with functions and variables renamed. function addReferencesDialogMenu(page_id) { // Adds data for dialog menu to DOM $('#link-references-dialog').remove(); var ajax_url = config.urls.admin + 'module/edit?name=CkeLinkRefsDialog&pid=' + page_id; var $list = $('<ul></ul>'); $.getJSON(ajax_url).done(function(data) { if(data.length) { $.each(data, function(index, value) { $list.append( $('<li title="' + value.description + '">' + value.insertionvalues + '</li>') ); }); } else { $list.append( $('<li title="' + config.CkeLinkRefsDialog.no_references_text + '">' + config.CkeLinkRefsDialog.no_references_text + '</li>') ); //$list.append( $('<li class="no-references" title="' + config.CkeLinkRefsDialog.no_references_text + '">NO DATA</li>') ); } }); $('body').append( $('<div id="link-references-dialog"></div>').append($list) ); } The AJAX response section of the .module file is as follows. Again, just like the original, except the middle section that gets page info instead of attached-file info. public function ajaxResponse(HookEvent $event) { // Must be AJAX request, must be for this module, must include pid GET variable if(!$this->config->ajax || $this->input->get->name !== $this->className() || !$this->input->get->pid) return; $page = $this->pages->get( (int) $this->input->get->pid ); if(!$page->editable) return; $event->replace = true; $event->cancelHooks = true; $result = array(); // Get all relevant pages $referencePages = wire('pages')->find('template=reference'); // Build array of page info for menu foreach($referencePages as $refPage) { $pageUrl = $refPage->url; $pageTitle = $refPage->title; $pageTitleArr = explode("|", str_replace("). ",")|",$pageTitle)); $result[] = array( 'description'=> $this->truncate($pageTitle, 60), 'insertionvalues' => $pageTitleArr[0]."|".$pageUrl ); } $event->return = json_encode($result); } I am unable to understand how or why superuser permissions (or absence of such permissions) have any effect. Any help gratefully received!
  6. A good point @kongondo. There should be enough relevant words in the posts to bring it up in a search. And thanks @Robin S. I suspected there wasn't a way to automate CK Editor changes from the API, but there might have been something I hadn't cottoned on to. Using a PHP DOM parser is a good suggestion - though in this case there were only a couple of dozen instances, so I fixed them the "hard" way, editing by hand in phpMyAdmin! Also, thanks for the good advice on formatting species names in titles. I particularly like the reverse-markdown idea, and I've already thought of somewhere I might use it. There's another solution I'm using on another more-complex site, where I'm developing a module that allows users to enter italicized scientific names in a rich text field (the italicization is quite complex because it's botanical names with hybrids and cultivars) and hooks into page saving to keep a plain-text title and the page name up to date. But I have to be a bit careful with the module not doing unexpected things (though it's becoming quite robust), so it's not really worth installing for the simpler case at hand.
  7. A good thought about text formatters @BitPoet, which I followed up, but they turn out not to be the cause of the problem. However, I searched the raw data for the field in MySQL, and there, for some of the records in title_formatted, was the troublesome data. It is old tags from the previous version of the site from which the data was imported. For example, viewed through phpMyAdmin, the title_formatted field for a record contains: <a href="/site/en/tree-info/-407--i-quercus-rubra-i/"> <i>Quercus rubra</i> </a> However, in PW clicking on the Source button for title_formatted gives: <p><em>Quercus rubra</em></p> And more-or-less the same with the browser's Inspect Element tool. So, PW templates are getting the data as it is stored in the database field. But CK Editor is rendering it differently in the PW back end. The data was imported directly by script, and thus was not entered through CK Editor. When the page is opened in the PW back end and saved, the data is stored in the database as it rendered by CK Editor (so in my particular case the extra <a> tags are removed). However, using $page->save() from a script does not trigger the CK Editor behaviour (perhaps there's a way that it could). I'm wondering if it's worth re-posting this information under another title, as it really has nothing to do with finding pages and might be useful for someone.
  8. Thanks @BitPoet, you put me on the right track - though it's taken me a while to get there. I can now work round the problem, but it has revealed another mystery, and I'd be happier if I understood what's happening! It turns out the pages do all exist, but in some circumstances the wrong URL is being returned. So the code in my OP is not actually the relevant bit. It's the rendering of the results that caused the issue: if($matches->count) { $content = "<h2>Found {$matches->count} pages matching your query:</h2>"; $content .= "<ul>"; foreach($matches as $match) { $content .= "<li>"; // THE TROUBLE OCCURS HERE when $itemTitle is set to title_formatted $itemTitle = $match->title_formatted ? $match->title_formatted : $match->title; $content .= "<a href='{$match->url}'>{$itemTitle}</a>"; $content .= "</li>"; } $content .= "</ul>"; } else { $content = "<h2>Sorry, no results were found.</h2>"; } (The <p> tags should be removed from title_formatted to give a tidy listing, but that isn't the issue here.) When $itemTitle is set to title_formatted, the resulting HTML is like this (I should have noticed this before!): <li><a href="/publications/tree-profiles/quercus-rubra/"></a><a href="/site/en/tree-info/tree-info/-407--i-quercus-rubra-i/"> <i>Quercus rubra</i> </a></li> I can work round this by sanitizing the text. For example, the following gets rid of the problem: $itemTitle = $match->title_formatted ? $sanitizer->text($match->title_formatted) : $match->title; And I'm sure I can easily come up with a method that keeps the <i> tags. So in terms of developing the site, problem solved. However, I have checked the title_formatted field, both using CK Editor's View Source and the browser's Inspect tool, and there is no sign of that extra, incorrect URL or an <a> tag. So I'm still really puzzled about where it's coming from!
  9. I've implemented a straightforward site search, but among the correct results it is returning pages that don't exist with strange URLs. If, for instance, the search is for "quercus" (it's a site about trees), some valid results are returned, e.g.: [domain]/publications/general-articles/quercus-tungmaiensis/ But I also get pages that do not exist with URLs I can't explain, e.g.: [domain]/site/en/tree-info/tree-info/-404--i-quercus-tungmaiensis-i/ [domain]/site/en/tree-info/-407--i--quercus-rubra-i/ [domain]/site/en/tree-info/tree-info/-407--i-quercus-rubra-i/ Note that there are fields in the system that contain italicised versions of the page title (e.g. "<i>Quercus rubra</i>"), and the tags may have got into the page title and name before the data was cleaned up. At one level explains the "-i-" in the invalid URLs, but it doesn't get me much further! The search is based closely on that in the PW default site, and the relevant code is as follows: $q = $sanitizer->text($input->get->q); if($q) { // Set up the search term $input->whitelist('q', $q); $q = $sanitizer->selectorValue($q); // Build the selector $selector = "title|main_text|item_description~=$q, has_parent!=2, limit=50"; // Find the pages $matches = $pages->find($selector); if($matches->count) { // ... // Render the results // ... } } I may well be missing something obvious, but at the moment I'm completely puzzled. Anyone know what's happening?
  10. I thought it might be worth mentioning - given remarks above - that another three years on this feature is still getting new users This time, it's to fire off my own page-renaming module before the Custom Upload Names module makes updates when the page name changes. This has allowed the modules to work together really easily and, I suspect, saved quite a lot of hard work!
  11. Many thanks @Robin S. I was coming at this from a different direction, and it hadn't occurred to me that link abstraction was what I was trying to achieve, but certainly it is!
  12. Something has gone wrong with @Soma's post - it's appearing just as a loading spinner. I have just the same question as the OP, who describes the answer as "absolutely fantastic", so it'd be great to know what that answer was!
  13. I had the same thing, and it was a result of permissions not being set properly for the dashboard. On the Settings tab for your Dashboard page, the role (or roles) for your user should appear under "Who can access this page?". If it doesn't, I'm not totally sure which of the following steps fixed it for me, but something worked! First, make sure the "dashboard" permission is selected for the role (the permission should have been created by the module). And of course, check the role is assigned to the relevant users. Then go to the Modules page and click the Refresh button. Then if that doesn't work, you may need to go to the permissions for the Admin template and under Access change "manage view and edit access" to Yes. Then hit Refresh on the modules page again. By the way, a quick look inside the Dashboard module indicates it uses the technique Ryan suggests at https://processwire.com/talk/topic/276-creating-new-admin-page/, which may help with debugging.
  • Create New...