!C99Shell v. 2.5 [PHP 8 Update] [24.05.2025]!

Software: Apache/2.4.41 (Ubuntu). PHP/8.0.30 

uname -a: Linux apirnd 5.4.0-204-generic #224-Ubuntu SMP Thu Dec 5 13:38:28 UTC 2024 x86_64 

uid=33(www-data) gid=33(www-data) groups=33(www-data) 

Safe-mode: OFF (not secure)

/var/www/html/laravel-crm/vendor/webklex/php-imap/tests/live/   drwxrwxrwx
Free 13.06 GB of 57.97 GB (22.53%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Self remove    Logout    


Viewing file:     QueryTest.php (12.54 KB)      -rw-rw-rw-
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
/*
* File: QueryTest.php
* Category: -
* Author: M.Goldenbaum
* Created: 04.03.23 03:52
* Updated: -
*
* Description:
*  -
*/

namespace Tests\live;

use 
Carbon\Carbon;
use 
Webklex\PHPIMAP\ClientManager;
use 
Webklex\PHPIMAP\Exceptions\AuthFailedException;
use 
Webklex\PHPIMAP\Exceptions\ConnectionFailedException;
use 
Webklex\PHPIMAP\Exceptions\EventNotFoundException;
use 
Webklex\PHPIMAP\Exceptions\FolderFetchingException;
use 
Webklex\PHPIMAP\Exceptions\GetMessagesFailedException;
use 
Webklex\PHPIMAP\Exceptions\ImapBadRequestException;
use 
Webklex\PHPIMAP\Exceptions\ImapServerErrorException;
use 
Webklex\PHPIMAP\Exceptions\InvalidMessageDateException;
use 
Webklex\PHPIMAP\Exceptions\InvalidWhereQueryCriteriaException;
use 
Webklex\PHPIMAP\Exceptions\MaskNotFoundException;
use 
Webklex\PHPIMAP\Exceptions\MessageContentFetchingException;
use 
Webklex\PHPIMAP\Exceptions\MessageFlagException;
use 
Webklex\PHPIMAP\Exceptions\MessageHeaderFetchingException;
use 
Webklex\PHPIMAP\Exceptions\MessageSearchValidationException;
use 
Webklex\PHPIMAP\Exceptions\ResponseException;
use 
Webklex\PHPIMAP\Exceptions\RuntimeException;
use 
Webklex\PHPIMAP\Folder;
use 
Webklex\PHPIMAP\Query\WhereQuery;

/**
 * Class QueryTest
 *
 * @package Tests
 */
class QueryTest extends LiveMailboxTestCase {

    
/**
     * Try to create a new query instance
     *
     * @return void
     * @throws AuthFailedException
     * @throws ConnectionFailedException
     * @throws FolderFetchingException
     * @throws ImapBadRequestException
     * @throws ImapServerErrorException
     * @throws MaskNotFoundException
     * @throws ResponseException
     * @throws RuntimeException
     */
    
public function testQuery(): void {
        
$folder $this->getFolder('INBOX');
        
self::assertInstanceOf(Folder::class, $folder);

        
self::assertInstanceOf(WhereQuery::class, $folder->query());
        
self::assertInstanceOf(WhereQuery::class, $folder->search());
        
self::assertInstanceOf(WhereQuery::class, $folder->messages());
    }

    
/**
     * Try to create a new query instance with a where clause
     *
     * @return void
     * @throws AuthFailedException
     * @throws ConnectionFailedException
     * @throws EventNotFoundException
     * @throws FolderFetchingException
     * @throws ImapBadRequestException
     * @throws ImapServerErrorException
     * @throws InvalidMessageDateException
     * @throws MaskNotFoundException
     * @throws MessageContentFetchingException
     * @throws MessageFlagException
     * @throws MessageHeaderFetchingException
     * @throws ResponseException
     * @throws RuntimeException
     * @throws GetMessagesFailedException
     * @throws InvalidWhereQueryCriteriaException
     * @throws MessageSearchValidationException
     */
    
public function testQueryWhere(): void {
        
$client $this->getClient();

        
$delimiter $this->getManager()->get("options.delimiter");
        
$folder_path implode($delimiter, ['INBOX''search']);

        
$folder $client->getFolder($folder_path);
        if (
$folder !== null) {
            
self::assertTrue($this->deleteFolder($folder));
        }
        
$folder $client->createFolder($folder_pathfalse);

        
$messages = [
            
$this->appendMessageTemplate($folder'1366671050@github.com.eml'),
            
$this->appendMessageTemplate($folder'attachment_encoded_filename.eml'),
            
$this->appendMessageTemplate($folder'attachment_long_filename.eml'),
            
$this->appendMessageTemplate($folder'attachment_no_disposition.eml'),
            
$this->appendMessageTemplate($folder'bcc.eml'),
            
$this->appendMessageTemplate($folder'boolean_decoded_content.eml'),
            
$this->appendMessageTemplate($folder'email_address.eml'),
            
$this->appendMessageTemplate($folder'embedded_email.eml'),
            
$this->appendMessageTemplate($folder'embedded_email_without_content_disposition.eml'),
            
$this->appendMessageTemplate($folder'embedded_email_without_content_disposition-embedded.eml'),
            
$this->appendMessageTemplate($folder'example_attachment.eml'),
            
$this->appendMessageTemplate($folder'example_bounce.eml'),
            
$this->appendMessageTemplate($folder'four_nested_emails.eml'),
            
$this->appendMessageTemplate($folder'gbk_charset.eml'),
            
$this->appendMessageTemplate($folder'html_only.eml'),
            
$this->appendMessageTemplate($folder'imap_mime_header_decode_returns_false.eml'),
            
$this->appendMessageTemplate($folder'inline_attachment.eml'),
            
$this->appendMessageTemplate($folder'issue-275.eml'),
            
$this->appendMessageTemplate($folder'issue-275-2.eml'),
            
$this->appendMessageTemplate($folder'issue-348.eml'),
            
$this->appendMessageTemplate($folder'ks_c_5601-1987_headers.eml'),
            
$this->appendMessageTemplate($folder'mail_that_is_attachment.eml'),
            
$this->appendMessageTemplate($folder'missing_date.eml'),
            
$this->appendMessageTemplate($folder'missing_from.eml'),
            
$this->appendMessageTemplate($folder'mixed_filename.eml'),
            
$this->appendMessageTemplate($folder'multipart_without_body.eml'),
            
$this->appendMessageTemplate($folder'multiple_html_parts_and_attachments.eml'),
            
$this->appendMessageTemplate($folder'multiple_nested_attachments.eml'),
            
$this->appendMessageTemplate($folder'nestes_embedded_with_attachment.eml'),
            
$this->appendMessageTemplate($folder'null_content_charset.eml'),
            
$this->appendMessageTemplate($folder'pec.eml'),
            
$this->appendMessageTemplate($folder'plain.eml'),
            
$this->appendMessageTemplate($folder'plain_only.eml'),
            
$this->appendMessageTemplate($folder'plain_text_attachment.eml'),
            
$this->appendMessageTemplate($folder'references.eml'),
            
$this->appendMessageTemplate($folder'simple_multipart.eml'),
            
$this->appendMessageTemplate($folder'structured_with_attachment.eml'),
            
$this->appendMessageTemplate($folder'thread_my_topic.eml'),
            
$this->appendMessageTemplate($folder'thread_re_my_topic.eml'),
            
$this->appendMessageTemplate($folder'thread_unrelated.eml'),
            
$this->appendMessageTemplate($folder'undefined_charset_header.eml'),
            
$this->appendMessageTemplate($folder'undisclosed_recipients_minus.eml'),
            
$this->appendMessageTemplate($folder'undisclosed_recipients_space.eml'),
            
$this->appendMessageTemplate($folder'unknown_encoding.eml'),
            
$this->appendMessageTemplate($folder'without_charset_plain_only.eml'),
            
$this->appendMessageTemplate($folder'without_charset_simple_multipart.eml'),
        ];

        
$folder->getClient()->expunge();

        
$query $folder->query()->all();
        
self::assertEquals(count($messages), $query->count());

        
$query $folder->query()->whereSubject("test");
        
self::assertEquals(11$query->count());

        
$query $folder->query()->whereOn(Carbon::now());
        
self::assertEquals(count($messages), $query->count());

        
self::assertTrue($this->deleteFolder($folder));
    }

    
/**
     * Test query where criteria
     *
     * @return void
     * @throws AuthFailedException
     * @throws ConnectionFailedException
     * @throws FolderFetchingException
     * @throws ImapBadRequestException
     * @throws ImapServerErrorException
     * @throws InvalidWhereQueryCriteriaException
     * @throws MaskNotFoundException
     * @throws ResponseException
     * @throws RuntimeException
     */
    
public function testQueryWhereCriteria(): void {
        
$folder $this->getFolder('INBOX');
        
self::assertInstanceOf(Folder::class, $folder);

        
$this->assertWhereSearchCriteria($folder'SUBJECT''Test');
        
$this->assertWhereSearchCriteria($folder'BODY''Test');
        
$this->assertWhereSearchCriteria($folder'TEXT''Test');
        
$this->assertWhereSearchCriteria($folder'KEYWORD''Test');
        
$this->assertWhereSearchCriteria($folder'UNKEYWORD''Test');
        
$this->assertWhereSearchCriteria($folder'FLAGGED''Seen');
        
$this->assertWhereSearchCriteria($folder'UNFLAGGED''Seen');
        
$this->assertHeaderSearchCriteria($folder'Message-ID''Seen');
        
$this->assertHeaderSearchCriteria($folder'In-Reply-To''Seen');
        
$this->assertWhereSearchCriteria($folder'BCC''test@example.com');
        
$this->assertWhereSearchCriteria($folder'CC''test@example.com');
        
$this->assertWhereSearchCriteria($folder'FROM''test@example.com');
        
$this->assertWhereSearchCriteria($folder'TO''test@example.com');
        
$this->assertWhereSearchCriteria($folder'UID''1');
        
$this->assertWhereSearchCriteria($folder'UID''1,2');
        
$this->assertWhereSearchCriteria($folder'ALL');
        
$this->assertWhereSearchCriteria($folder'NEW');
        
$this->assertWhereSearchCriteria($folder'OLD');
        
$this->assertWhereSearchCriteria($folder'SEEN');
        
$this->assertWhereSearchCriteria($folder'UNSEEN');
        
$this->assertWhereSearchCriteria($folder'RECENT');
        
$this->assertWhereSearchCriteria($folder'ANSWERED');
        
$this->assertWhereSearchCriteria($folder'UNANSWERED');
        
$this->assertWhereSearchCriteria($folder'DELETED');
        
$this->assertWhereSearchCriteria($folder'UNDELETED');
        
$this->assertHeaderSearchCriteria($folder'Content-Language','en_US');
        
$this->assertWhereSearchCriteria($folder'CUSTOM X-Spam-Flag NO');
        
$this->assertWhereSearchCriteria($folder'CUSTOM X-Spam-Flag YES');
        
$this->assertWhereSearchCriteria($folder'NOT');
        
$this->assertWhereSearchCriteria($folder'OR');
        
$this->assertWhereSearchCriteria($folder'AND');
        
$this->assertWhereSearchCriteria($folder'BEFORE''01-Jan-2020'true);
        
$this->assertWhereSearchCriteria($folder'BEFORE'Carbon::now()->subDays(1), true);
        
$this->assertWhereSearchCriteria($folder'ON''01-Jan-2020'true);
        
$this->assertWhereSearchCriteria($folder'ON'Carbon::now()->subDays(1), true);
        
$this->assertWhereSearchCriteria($folder'SINCE''01-Jan-2020'true);
        
$this->assertWhereSearchCriteria($folder'SINCE'Carbon::now()->subDays(1), true);
    }

    
/**
     * Assert where search criteria
     * @param Folder $folder
     * @param string $criteria
     * @param string|Carbon|null $value
     * @param bool $date
     *
     * @return void
     * @throws AuthFailedException
     * @throws ConnectionFailedException
     * @throws ImapBadRequestException
     * @throws ImapServerErrorException
     * @throws InvalidWhereQueryCriteriaException
     * @throws ResponseException
     * @throws RuntimeException
     */
    
protected function assertWhereSearchCriteria(Folder $folderstring $criteriaCarbon|string $value nullbool $date false): void {
        
$query $folder->query()->where($criteria$value);
        
self::assertInstanceOf(WhereQuery::class, $query);

        
$item $query->getQuery()->first();
        
$criteria str_replace("CUSTOM """$criteria);
        
$expected $value === null ? [$criteria] : [$criteria$value];
        if (
$date === true && $value instanceof Carbon) {
            
$date_format ClientManager::get('date_format''d M y');
            
$expected[1] = $value->format($date_format);
        }

        
self::assertIsArray($item);
        
self::assertIsString($item[0]);
        if(
$value !== null) {
            
self::assertCount(2$item);
            
self::assertIsString($item[1]);
        }else{
            
self::assertCount(1$item);
        }
        
self::assertSame($expected$item);
    }

    
/**
     * Assert header search criteria
     * @param Folder $folder
     * @param string $criteria
     * @param mixed|null $value
     *
     * @return void
     * @throws AuthFailedException
     * @throws ConnectionFailedException
     * @throws ImapBadRequestException
     * @throws ImapServerErrorException
     * @throws InvalidWhereQueryCriteriaException
     * @throws ResponseException
     * @throws RuntimeException
     */
    
protected function assertHeaderSearchCriteria(Folder $folderstring $criteriamixed $value null): void {
        
$query $folder->query()->whereHeader($criteria$value);
        
self::assertInstanceOf(WhereQuery::class, $query);

        
$item $query->getQuery()->first();

        
self::assertIsArray($item);
        
self::assertIsString($item[0]);
        
self::assertCount(1$item);
        
self::assertSame(['HEADER '.$criteria.' '.$value], $item);
    }
}

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ ok ]

:: Make Dir ::
 
[ ok ]
:: Make File ::
 
[ ok ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 2.5 [PHP 8 Update] [24.05.2025] | Generation time: 0.0075 ]--